Bash:在循环中读取具有已定义文件扩展名的文件

时间:2013-03-15 16:24:00

标签: bash

虽然此代码有效

#!/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的文件。

1 个答案:

答案 0 :(得分:1)

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

来自man bash

  

支撑扩展在任何其他扩展之前执行,任何扩展   其他扩展特有的字符将保留在结果中。它   严格是文字的。 Bash不适用任何句法解释   在扩展的背景下或大括号之间的文本。至   避免与参数扩展冲突,字符串'$ {'不是   被认为有资格进行大括号扩展

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

eval echo "$d.$a"