我的 shell 脚本中有多个具有相同模式的全局变量,例如:
VALID_DOMESTIC_ANIMAL=(cat dog)
VALID_ACQUATIC_ANIMAL=(shark dolphin)
现在,还有另一个参数 CATAGORY ,可以是 ACQUATIC/DOMESTIC。如何选择要迭代的预期全局变量?我尝试了以下代码:
#!/bin/bash
VALID_DOMESTIC_ANIMAL=(cat dog)
VALID_ACQUATIC_ANIMAL=(shark dolphin)
CATAGORY=ACQUATIC
VALID_CATAGORY_ANIMAL=VALID_${CATAGORY}_ANIMAL
#echo "VALID_CATAGORY_ANIMAL ${VALID_CATAGORY_ANIMAL}"
for anime in "${VALID_CATAGORY_ANIMAL[@]}"; do
echo "${anime}"
done
我期待输出shark dolphin
,但我得到了VALID_ACQUATIC_ANIMAL
如何告诉 bash 脚本如果存在同名变量,则使用它?
答案1
答案2
这可能会让事情变得更清楚。该变量包含另一个变量的名称。要获取其值,shell 必须首先展开变量名称,然后展开变量值。
for anime in $(eval echo \${$VALID_CATAGORY_ANIMAL[@]}); do
eval
- 它需要一个参数扩展变量并传递给 shell 执行
由于我们转义了第一个美元符号,命令将在以下位置执行:
$(echo ${VALID_ACQUATIC_ANIMAL[@]}
您可以在循环之前插入以下行
echo $VALID_CATAGORY_ANIMAL #VALID_ACQUATIC_ANIMAL
echo \${$VALID_CATAGORY_ANIMAL[@]} #${VALID_ACQUATIC_ANIMAL[@]}
eval echo \${$VALID_CATAGORY_ANIMAL[@]} #shark, dolphin