2016-05-16 65 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