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