递增变量名导致找不到命令
Increment variable name results in command not found
我正在尝试根据输入递增变量名称并在循环完成后调用该值。
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=number is 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 is 1”命令未找到,因为那不是命令。例如,你可以这样写:
for i in `seq 5`; do
echo var$i="number is $i"
done
输出看起来像
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
相应地设置数组 var 的索引和值,然后遍历数组并打印值。
我正在尝试根据输入递增变量名称并在循环完成后调用该值。
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=number is 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 is 1”命令未找到,因为那不是命令。例如,你可以这样写:
for i in `seq 5`; do
echo var$i="number is $i"
done
输出看起来像
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
相应地设置数组 var 的索引和值,然后遍历数组并打印值。