我目前的代碼為
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 只是一個陣列
因此,我正在研究一種減少重復代碼的解決方案,
我知道我們可以在這里使用案例。
我想知道是否有一個解決方案可以使用陣列和 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
所以請告訴我是否有針對此類代碼示例的解決方案
uj5u.com熱心網友回復:
您需要通過保存構造的變數名稱來使用間接擴展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
參考:
- https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html#Shell-Parameter-Expansion
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/440727.html
