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