Bash 增量变量名导致找不到命令
我试图根据输入增加一个变量名,并在循环完成后调用该值Bash 增量变量名导致找不到命令,bash,variables,increment,variable-names,Bash,Variables,Increment,Variable Names,我试图根据输入增加一个变量名,并在循环完成后调用该值 for i in `seq 5`; do var$i="number is $i" done echo $var2 $var5 导致 ./test.sh: line 4: var1=number is 1: command not found ./test.sh: line 4: var2=number is 2: command not found ./test.sh: line 4: var3=number i
for i in `seq 5`; do
var$i="number is $i"
done
echo $var2 $var5
导致
./test.sh: line 4: var1=number is 1: command not found
./test.sh: line 4: var2=number is 2: command not found
./test.sh: line 4: var3=number is 3: command not found
./test.sh: line 4: var4=number is 4: command not found
./test.sh: line 4: var5=number is 5: command not found
有两件事我不明白:
var1=数字为1,表示一个命令。
var2和var5实际上是生成的,但它们不会显示在循环之外。
您不能像这样使用带有数字的变量名:您确实需要说:
var1=1
var2=2
var3=3
var4=4
var5=5
另一种方法是使用数组
就增加而言,这不是问题的一部分,但我给出的是,无论如何,你可以使用这样的东西:
Prompt> var1=1
Prompt> var2=$((var1+1))
Prompt> echo $var2
2
计算时请注意双括号
var1=number是未找到的1命令,因为该命令不是命令。例如,您可以编写:
对于'seq 5'中的i;做
echo var$i=编号为$i
完成
输出结果将如下所示
var1=number is 1
var2=number is 2
var3=number is 3
var4=number is 4
var5=number is 5
变量尚未生成,您不能仅动态生成变量。尝试使用数组
为了达到所需的结果,需要使用阵列,因此:
#!/bin/bash
for i in $(seq 5)
do
var[$i]="number is $i"
done
for i in "${var[@]}"
do
echo "$i"
done
相应地设置数组变量的索引和值,然后在数组中循环并打印值。var2和var5也不会生成。变量赋值的语法是NAME=VALUE。参数扩展稍后才起作用,因为var$i不是有效的变量名,所以会出现类似的错误,就像编写了var,i=value一样。如果您觉得必须创建这样的变量,可以执行eval var$i=number is$i,但在大多数情况下,以不同的方式设计脚本将是更好的解决方案。