Shell:如何在循环数组时附加前缀?

时间:2011-04-27 19:29:26

标签: arrays bash shell

我正在尝试遍历一个数组并为数组中的每个值附加一个前缀。简化版代码:

#!/bin/sh
databases=( db1 db2 db3 )
for i in live_${databases[@]} stage_${databases[@]}
do
    ....
done

但是,它只是将前缀添加到数组中的第一个值 - 它循环的值是:

live_db1 db2 db3 stage_db1 db2 db3

有什么想法?感谢。

4 个答案:

答案 0 :(得分:15)

databases=( db1 db2 db3 )
for i in ${databases[@]/#/live_} ${databases[@]/#/stage_}
do
    ....
done

答案 1 :(得分:1)

尝试这样的事情:

#!/bin/sh
databases="db1 db2 db3"
for i in $databases
do
    x="live_$i"
    y="stage_$i"
    echo "$x $y"
done

答案 2 :(得分:1)

for i in $( for d in ${databases[@]}; do echo "live_$d stage_$d"; done )
do
    ....
done

答案 3 :(得分:0)

只需添加 John Kugelman 的答案。详情请见:

bash手册页 - >参数扩展 - >模式替换

  

...   如果模式以#开头,则必须在开头处匹配   扩展参数值。   ...