Bash - 如何使用 FOR 循环访问带有数字后缀的变量

0 bash

我用 for 循环声明了 var0、var1、var2、var3。我如何回显 for 循环中的变量?这是代码。

#!/bin/bash

for i in {0..3}
do
  export var$i=$i
done;
Run Code Online (Sandbox Code Playgroud)

我在那里定义了 var0、var1、var2、var3.. 我如何在循环中访问它们?

我尝试了以下

for i in {0..3}
do
  echo $var$i
  tmpvar=var$i
  echo $tmpvar
done
Run Code Online (Sandbox Code Playgroud)

但是没有人给我 var0,var1 的值...第一个 echo 只打印了 '0,1,2,3',第二个 echo 打印了 'var0,var1,var2,var3' 我该怎么办?我要价值观。。

ilk*_*chu 5

鉴于,

var0=a
var1=b
var2=c
Run Code Online (Sandbox Code Playgroud)

对于 ksh93 或 bash 4.3 或更高版本,您可以使用 nameref 来指向各个变量:

for i in 0 1 2; do
    typeset -n p="var$i"
    echo "$p"
done
Run Code Online (Sandbox Code Playgroud)

但是,除非您明确需要将变量作为单独的标量(例如,因为您通过环境传递它们),并且不使用严格标准的 shell,而是使用 Bash 或 ksh,否则您应该使用数组:

#!/bin/bash
a=(a b c)
for i in 0 1 2; do
    echo "${a[i]}"
done
Run Code Online (Sandbox Code Playgroud)

或忽略索引:

for x in "${a[@]}"; do
    echo "$x"
done
Run Code Online (Sandbox Code Playgroud)

(当然,Zsh 也有数组,默认情况下它只是从 1 开始索引,所以第一个不能直接工作。)