我想在 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