使用外部字符串访问变量。[SHELL 脚本]
Access variables using an external string.[SHELL script]
我目前的代码为
if [[ "$FIRSTFLAG" == 1 ]] ; then
all_comp+=("FIRST")
fi
if [[ "$SECONDFLAG" == 1 ]] ; then
all_comp+=("SECOND")
fi
if [[ "$THIRDFLAG" == 1 ]] ; then
all_comp+=("THIRD")
fi
all_comp 只是一个数组
所以,我正在研究减少重复代码的解决方案
我知道我们可以在这里使用 case。
我想知道是否有可以使用数组和 for 循环完成的解决方案 \
例如(我知道它在语法上是错误的)
names=("FIRST" "SECOND" "THIRD")
for i in $names[@]; do
if [[ ${i}FLAG == 1 ]]; then <- This line is the issue
all_comp+=("$i")
fi
done
所以请告诉我是否有针对此类代码示例的解决方案
需要间接扩展保存构造的变量名,例如iflag=${i}FLAG
,那么就可以使用间接扩展和${!iflag}
,例如
FIRSTFLAG=1
SECONDFLAG=0
THIRDFLAG=1
all_comp=()
names=("FIRST" "SECOND" "THIRD")
for i in ${names[@]}; do
iflag=${i}FLAG
if [[ ${!iflag} == 1 ]]; then
all_comp+=("$i")
fi
done
echo ${all_comp[@]} # Outputs: FIRST THIRD
哦另一个答案,你可以使用算术扩展运算符 (( ))
即
FIRSTFLAG=1
SECONDFLAG=0
THIRDFLAG=1
all_comp=()
names=("FIRST" "SECOND" "THIRD")
for i in ${names[@]}; do
if (( ${i}FLAG == 1 )); then
all_comp+=("$i")
(( ${i}FLAG = 99 ))
fi
done
echo ${all_comp[@]} # FIRST THIRD
echo $FIRSTFLAG # 99
echo $SECONDFLAG # 0
echo $THIRDFLAG # 99
参考:
我目前的代码为
if [[ "$FIRSTFLAG" == 1 ]] ; then
all_comp+=("FIRST")
fi
if [[ "$SECONDFLAG" == 1 ]] ; then
all_comp+=("SECOND")
fi
if [[ "$THIRDFLAG" == 1 ]] ; then
all_comp+=("THIRD")
fi
all_comp 只是一个数组
所以,我正在研究减少重复代码的解决方案
我知道我们可以在这里使用 case。
我想知道是否有可以使用数组和 for 循环完成的解决方案 \
例如(我知道它在语法上是错误的)
names=("FIRST" "SECOND" "THIRD")
for i in $names[@]; do
if [[ ${i}FLAG == 1 ]]; then <- This line is the issue
all_comp+=("$i")
fi
done
所以请告诉我是否有针对此类代码示例的解决方案
需要间接扩展保存构造的变量名,例如iflag=${i}FLAG
,那么就可以使用间接扩展和${!iflag}
,例如
FIRSTFLAG=1
SECONDFLAG=0
THIRDFLAG=1
all_comp=()
names=("FIRST" "SECOND" "THIRD")
for i in ${names[@]}; do
iflag=${i}FLAG
if [[ ${!iflag} == 1 ]]; then
all_comp+=("$i")
fi
done
echo ${all_comp[@]} # Outputs: FIRST THIRD
哦另一个答案,你可以使用算术扩展运算符 (( ))
即
FIRSTFLAG=1
SECONDFLAG=0
THIRDFLAG=1
all_comp=()
names=("FIRST" "SECOND" "THIRD")
for i in ${names[@]}; do
if (( ${i}FLAG == 1 )); then
all_comp+=("$i")
(( ${i}FLAG = 99 ))
fi
done
echo ${all_comp[@]} # FIRST THIRD
echo $FIRSTFLAG # 99
echo $SECONDFLAG # 0
echo $THIRDFLAG # 99
参考: