使用变量间接

使用变量间接

我想在 shell 的 for 循环中使用变量。

我当前的代码:

VAA="1st_first"
VAB="2nd_second"
VAC="3rd_third"

for i in VAA VAB VAC; do
       if [[ "${i}" =~ ^[A-Za-z]*$ ]]; then
              echo "$i variable is a word"
       else
              echo "$i variable is not a word"
       fi
done

预期结果是检查 $VAR1、$VAR2 和 $VAR3 变量,然后打印它是一个单词。

当前输出为:

VAA variable is a word
VAB variable is a word
VAC variable is a word

这是不正确的,因为“$VAA”包含一个数字。

如何使用 for 循环外部的变量?

答案1

我通常用关联数组来解决这样的问题。但我不知道这是否是一个有效的解决方案。但这并不能保证输出中显示的原始顺序

#!/bin/bash

declare -A varCheck
varCheck=( [VAA]="stfirst" [VAB]="2nd_second" [VAC]="3rd_third" )


for var in ${!varCheck[@]}; do
       if [[ "${varCheck[$var]}" =~ ^[A-Za-z]*$ ]]; then
              echo "${var} variable is a word"
       else
              echo "${var} variable is not a word"
       fi
done

输出:

VAB variable is not a word
VAC variable is not a word
VAA variable is a word

答案2

使用变量间接

$i将显示迭代器一词i

${!i}将显示变量的内容。这是一个变量间接

因此要检查内容,您需要使用${!i}

解决方案是:

VAA="1st_first"
VAB="2nd_second"
VAC="3rd_third"

for i in VAA VAB VAC; do
       if [[ "${!i}" =~ ^[A-Za-z]*$ ]]; then
              echo "$i variable is a word"
       else
              echo "$i variable is not a word"
       fi
done

结果 :

VAA variable is not a word
VAB variable is not a word
VAC variable is not a word

相关内容