Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Shell:如何在数组中循环时附加前缀?_Arrays_Bash_Shell - Fatal编程技术网

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

Arrays Shell:如何在数组中循环时附加前缀?,arrays,bash,shell,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 有什么想法吗?谢谢。试试这样: #!/bin/sh databases="db1

我试图循环遍历一个数组,并为数组中的每个值添加一个前缀。代码的简化版本:

#!/bin/sh
databases=( db1 db2 db3 )
for i in live_${databases[@]} stage_${databases[@]}
do
    ....
done
但是,它仅将前缀前置到数组中的第一个值-它循环通过的值是:

live_db1 db2 db3 stage_db1 db2 db3

有什么想法吗?谢谢。

试试这样:

#!/bin/sh
databases="db1 db2 db3"
for i in $databases
do
    x="live_$i"
    y="stage_$i"
    echo "$x $y"
done
只是补充了约翰·库格曼的答案。详情请参阅:

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

。。。 如果图案以#开头,则必须在开头匹配 参数的扩展值。


我希望在行的
中添加前缀。原因是我还有第三个数组要循环,它不带前缀。(
用于$core live_$dbs stage_$dbs中的i
)。不过谢谢你-也许字符串会是数组的更好的替代品。嗯,我找到了一个解决方案。我添加了一个单独的for循环,通过$databases将
live_$I stage_$I
附加到$core,然后修改了主for循环,使其仅通过$core。谢谢你的帮助。(“prepend”表示前缀;“append”表示后缀;-))
for i in $( for d in ${databases[@]}; do echo "live_$d stage_$d"; done )
do
    ....
done
databases=( db1 db2 db3 )
for i in ${databases[@]/#/live_} ${databases[@]/#/stage_}
do
    ....
done