1

我有这样的脚本设置,我想使用循环打印开关名称。

swn1="something"
swn2="somethingelse"

for (( i=1; i<="$ii"; i++ ))
    do              
       echo "$swn$i "
    done

我已经搜索和搜索但没有运气,任何人都可以帮助我如何使用 for 循环打印 swn 吗?

4

3 回答 3

3

听起来你想要一个数组......

swn=("something" "something else")

for i in "${swn[@]}"
do
    echo $i
done
于 2013-09-19T09:10:13.530 回答
2

解决方案是变量间接。

swn1="something"
swn2="somethingelse"

for (( i=1; i<="$ii"; i++ ))
    do              
        var="swn$i"
        echo "${!var}"
    done

虽然通常你可以用数组来解决你的问题,但是使用另一个变量打印一个变量的方法是通过它。

如 bash 手册中所述:

如果参数的第一个字符是感叹号(!),则引入了变量间接级别。Bash 使用由其余参数形成的变量的值作为变量的名称;然后扩展此变量,并将该值用于其余的替换,而不是参数本身的值。这称为间接扩展。例外情况是 ${!prefix} 和 ${!name[@]} 的扩展。感叹号必须紧跟左大括号以引入间接性。

于 2013-09-19T09:09:29.660 回答
0

你不能这样做。swn1是一个令牌,swn2是另一个。看起来你想要一个数组,如果你想要一个 bash 脚本中的数组,你要么想将值作为文件中的单独行处理,要么切换到使用 Perl。

单独的行:

echo "something" > swnfile;
echo "somethingelse" >> swnfile;
cat file | while read line; do
    echo "$line";
done
于 2013-09-19T09:07:39.930 回答