递增变量名导致找不到命令

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

有两点我不明白:

  1. "var1=number is 1" 理解为命令。
  2. var2 和 var5 是实际生成的,但在循环外不显示。

你不能像这样使用带有数字的变量名:你真的需要说:

var1=1
var2=2
var3=3
var4=4
var5=5

另一种方法是使用数组。

就增加而言(这不是问题的一部分,但无论如何我都会给出),你可以使用这样的东西:

Prompt> var1=1
Prompt> var2=$((var1+1))
Prompt> echo $var2
2

(计算时注意双括号)

  1. “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
  1. 变量还没有生成,不能动态生成变量。尝试使用数组

为了达到要求的结果,需要使用数组,所以:

#!/bin/bash
for i in $(seq 5)
do
  var[$i]="number is $i"
done
for i in "${var[@]}"
do
    echo "$i"
done

相应地设置数组 var 的索引和值,然后遍历数组并打印值。