bash中数组的内联扩展

时间:2016-05-16 19:14:59

标签: arrays bash expansion

我正在尝试在bash中扩展数组:

FILES=(2009q{1..4})
echo ${FILES[@]}
echo ${FILES[@]}.zip

输出是:

2009q1 2009q2 2009q3 2009q4
2009q1 2009q2 2009q3 2009q4.zip

但是如何在echo 2009q{1..4}.zip扩展中扩展最后一行,以便最后一行看起来像:

2009q1.zip 2009q2.zip 2009q3.zip 2009q4.zip

...但是使用数组FILES

2 个答案:

答案 0 :(得分:6)

FILES=(2009q{1..4})
echo ${FILES[@]/%/.zip}

输出:

2009q1.zip 2009q2.zip 2009q3.zip 2009q4.zip

来自Bash' Parameter Expansion

  

${parameter/pattern/string}:扩展模式以生成与文件名扩展一样的模式。扩展参数,并将模式与其值的最长匹配替换为字符串。如果模式以' /'开头,则模式的所有匹配都将替换为字符串。通常只替换第一场比赛。如果模式以'#'开头,则它必须在参数的扩展值的开头匹配。 如果模式以'%'开头,则必须在参数展开值的末尾匹配。如果string为null,则删除模式匹配,并且/ following模式可能被省略。如果参数是' @'或者' ',替换操作依次应用于每个位置参数,并且扩展是结果列表。如果参数是一个数组变量,用' @'或者' ',替换操作依次应用于数组的每个成员,扩展是结果列表。

答案 1 :(得分:2)

您可以使用printf

printf "%s.zip " "${FILES[@]}"

2009q1.zip 2009q2.zip 2009q3.zip 2009q4.zip