我的脚本设置如下,我想使用循环打印开关名称。
swn1="something"
swn2="somethingelse"
for (( i=1; i<="$ii"; i++ ))
do
echo "$swn$i "
done
我搜索过并搜索过但没有运气,任何人都可以帮助我如何使用for循环打印swn?
答案 0 :(得分:3)
听起来你想要一个阵列......
swn=("something" "something else")
for i in "${swn[@]}"
do
echo $i
done
答案 1 :(得分:2)
解决方案是变量间接。
swn1="something"
swn2="somethingelse"
for (( i=1; i<="$ii"; i++ ))
do
var="swn$i"
echo "${!var}"
done
虽然通常你可以用数组来解决你的问题,但是使用另一个来打印变量的方法是通过它。
正如bash手册中所述:
如果参数的第一个字符是感叹号(!),则a 引入了变量间接的级别。 Bash使用的值 由参数的其余部分形成的变量作为名称 变量;然后展开此变量,并在该变量中使用该值 其余的替换,而不是参数本身的值。 这被称为间接扩张。对此的例外是 扩展$ {!prefix}和$ {!name [@]}。该 感叹号必须紧跟左支撑以便 介绍间接。
答案 2 :(得分:0)
你不能这样做。 swn1
是一个令牌,swn2
是另一个令牌。看起来你想要一个数组,如果你想要一个bash脚本中的数组,你要么想要将值作为文件中的单独行处理,要么切换到使用Perl。
单独的行:
echo "something" > swnfile;
echo "somethingelse" >> swnfile;
cat file | while read line; do
echo "$line";
done