我的环境可以使用以下格式定义灵活数量的变量:
Var1Value=A
Var2Value=B
Var3Value=C
Run Code Online (Sandbox Code Playgroud)
我现在想遍历变量,只要它们存在。在伪代码中:
i=1
while [exists "Var"$i"Value"]; do
echo "found variable, now doing some more complex processing logic"
#do some more stuff
i=$((i + 1))
done
Run Code Online (Sandbox Code Playgroud)
我是否在 bash 中完成这项工作(不使用数组)?
使用nameref。它们的工作方式类似于指向其他变量的指针(在 Bash 4.3 及更高版本中):
Var1Value=A
Var2Value=B
Var3Value=C
Var4Value=""
for (( i=1 ; ; i++ )); do
n="Var${i}Value" # the name of var
declare -n p="$n" # reference to the var
[ "${p+x}" ] || break # see if it exists
echo "$n: '$p'"
done
Run Code Online (Sandbox Code Playgroud)
"${p+x}"评估指向x的变量是否p存在,因此这也处理设置但为空的变量。
或者,使用间接变量扩展${!n},它指的是由 命名的变量n。
for (( i=1 ; ; i++ )); do
n="Var${i}Value" # the name of var
[ "${!n+x}" ] || break # see if it exists
echo "$n: '${!n}'"
done
Run Code Online (Sandbox Code Playgroud)
但实际上,您应该使用数组。这里的三个选择都不是标准的,但数组是迄今为止最合乎逻辑的。
VarValue=( A B C )
for value in "${VarValue[@]}"; do
# use "$value" here
printf 'Value is "%s"\n' "$value"
done
Run Code Online (Sandbox Code Playgroud)
也可以看看: