2

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

 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

ETC..

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

我也尝试过使用

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

但这仅在 z1、z2、z3 等是整数而不是浮点数时才有效....

4

4 回答 4

5

我希望这有帮助:

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
于 2013-05-21T20:03:09.480 回答
3

最佳(使用数组):

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

不太好(使用间接扩展——一个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在这种情况下不太有害但通常是危险的(并且难以正确使用)。

于 2013-05-21T20:10:03.453 回答
2

这不是可移植的,但在 bash 中你可以这样做:

name=z$i
echo ${!name}
于 2013-05-21T20:07:55.467 回答
2

如果你定义了 variable 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
于 2018-08-10T01:00:33.150 回答