为什么会发生这种情况?为什么我必须手动显式重新分配变量,但如果我在变量名称中有另一个变量,则不能这样做?
SCRIPT:
#!/bin/bash
a_1=1
a_2=1
for temp in 1 2
do
a_$temp="2"
echo $((a_$temp))
done
a_1=2
a_2=2
echo $a_1
echo $a_2
输出:
[dgupta@della4 Rates_Of_Quenching]$ ./test.sh
./test.sh: line 8: a_1=2: command not found
1
./test.sh: line 8: a_2=2: command not found
1
2
2
答案 0 :(得分:5)
而不是:
a_$temp="2"
使用:
declare a_$temp="2"
创建具有动态名称的变量。
答案 1 :(得分:1)
就bash而言,您正在尝试执行命令'a_1=2'
,而不是执行赋值。您可以使用declare
或其同义词typeset
来解决此问题:
'a_1=2' # bash: a_1=2: command not found
typeset 'a_1=2'
echo $a_1 # 2
declare 'a_1=3'
echo $a_1 # 3
虽然可以使用declare
,但您可能希望利用bash数组(自bash版本2以来一直存在)而不是使用带有数字后缀的变量:
a=(1 1)
echo ${a[0]} # 1
echo ${a[1]} # 1
for i in 0 1; do a[i]=2; done
echo ${a[0]} # 2
echo ${a[1]} # 2