2016-05-16 63 views
3

阵列我试图扩大在bash数组:内联扩展在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

+1

'FILES =(2009q {1..4} .zip)'不会做? – Jahid

回答

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

输出:

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

从bash的Parameter Expansion

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

+2

没有想到这一点,聪明。 – karakfa

2

您可以使用printf

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

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