我正在尝试打印包含小数点数的文件名... 说
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等是整数而不是浮点数....
答案 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