Bash将值重新赋值给变量"命令未找到"

时间:2014-06-04 19:49:21

标签: bash

为什么会发生这种情况?为什么我必须手动显式重新分配变量,但如果我在变量名称中有另一个变量,则不能这样做?

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

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