如何使用for循环在shell中创建列表



我正在尝试使用for循环创建一个新数组

Images="alpine ubuntu centos"

Image_tags="$(for i in $Images; do
r_madoori1/$i
done)"

echo $Image_tags

我在等

Image_tags="r_madoori1/alpine r_madoori1/ubuntu r_madoori1/centos"

相反,我得到了低于错误

./shell.sh: line 7: r_madoori1/alpine: No such file or directory
./shell.sh: line 7: r_madoori1/ubuntu: No such file or directory
./shell.sh: line 7: r_madoori1/centos: No such file or directory

无需使用任何循环,即可在bash:中执行此操作

Images="alpine ubuntu centos"
Image_tags="r_madoori1/${Images// / r_madoori1/}"
echo "$Image_tags"

输出:

r_madoori1/alpine r_madoori1/ubuntu r_madoori1/centos

for循环重复命令;它并没有建立一个值列表。你可以写一些类似的东西

# OK
Image_tags="$(for i in $Images; do
echo -n "r_madoori1/$i "
done)"

但是从中执行多个赋值会更简单,而不是在单个赋值中嵌入一个循环。

# Better
for i in $Images; do
Image_tags="$Image_tags r_madoori1/$i"
done

但是,如果您使用的是bash,则应该使用实数组,而不是空格分隔的字符串。

# Best
Images=(alpine ubuntu centos)
for i in "${Images[@]}"; do
Image_tags+=( "r_maddori1/$i" )
done

或者更简洁地说

Images=(alpine ubuntu centos)
Image_tags=("${Images[@]/#/r_madoori1/}")

相关内容

  • 没有找到相关文章

最新更新