1

虽然此代码有效

#!/bin/bash
d="test_files/*"
for f in $d.{mp3,txt} ;do
do something 
done

将 {mp3,txt} 放入变量中不会,请参见下面的代码。

#!/bin/bash
a={mp3,txt}
d="test_files/*"
for f in $d."$a" ;do
do smoething
done

这里的输出是 /*.{mp3,txt}

将 {mp3,txt} 放入数组

a=({mp3,txt})

仅输出带有 *.mp3 扩展名的文件。

4

1 回答 1

1

它不起作用,因为大括号扩展发生在所有其他扩展之前。

来自man bash

大括号扩展在任何其他扩展之前执行,并且任何其他扩展的特殊字符都保留在结果中。它是严格的文本。Bash 不对扩展的上下文或大括号之间的文本应用任何句法解释。为避免与参数扩展发生冲突,字符串 '${' 不适合大括号扩展

您可以使用eval存储在变量中的大括号展开,但不建议这样做。例如:

eval echo "$d.$a"
于 2013-03-15T16:40:36.263 回答