shell脚本中的指针?

时间:2013-05-21 19:54:46

标签: bash shell

我正在尝试打印包含小数点数的文件名... 说

 L2.3stop.txt

我将变量定义为:

 z1=2.3
 z2=3.4
 z3=7.8
 z4=8.9

等等

在for循环中,我从1到5

运行

如果我做的话,在循环内部

 temp=`echo z$i`

然后我使用

打印文件名
 echo L${temp}stop.txt

它只是打印

 Lz1stop.txt
 Lz2stop.txt

等。

如何打印所需的文件名....

我也尝试过使用

 echo L$((z$i))stop.txt

但这只适用于z1,z2,z3等是整数而不是浮点数....

4 个答案:

答案 0 :(得分:4)

我希望这会有所帮助:

z1=2.3
z2=3.4
z3=7.8
z4=8.9

for i in {1..4};do
        echo L$(eval "echo \$z"$i)stop.txt
done

或者这也应该有效:

for i in {1..4};do
    echo L$(echo $(echo "\$z$i"))stop.txt
done

输出:

L2.3stop.txt
L3.4stop.txt
L7.8stop.txt
L8.9stop.txt

答案 1 :(得分:2)

这不是便携式的,但在bash中你可以做到:

name=z$i
echo ${!name}

答案 2 :(得分:2)

最佳(使用数组):

z=( 2.3 3.4 7.8 8.9 9.8 ) # Added fifth value
for x in "${z[@]}"
do
    echo L${x}stop.txt
done

不太好(使用indirect expansion - bash功能):

z1=2.3
z2=3.4
z3=7.8
z4=8.9
z5=9.8  # Added fifth value

for i in {1..5}
do
    v=z$i
    echo L${!v}stop.txt
done

两者都产生:

L2.3stop.txt
L3.4stop.txt
L7.8stop.txt
L8.9stop.txt
L9.8stop.txt

两者都避免使用eval,这在这种情况下不是太有害,但一般来说是危险的(并且难以正确使用)。

答案 3 :(得分:1)

如果定义了变量z,则可以执行以下操作:

for v in ${!z*}; do echo L${!v}stop.txt; done

或:

for v in z{1..4}; do echo L${!v}stop.txt; done