使用另一个打印变量

时间:2013-09-19 09:02:43

标签: bash echo

我的脚本设置如下,我想使用循环打印开关名称。

swn1="something"
swn2="somethingelse"

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

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

3 个答案:

答案 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