3 回答

TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個(gè)贊
經(jīng)典技術(shù)(轉(zhuǎn)義元字符):
if [ \( "$g" -eq 1 -a "$c" = "123" \) -o \( "$g" -eq 2 -a "$c" = "456" \) ]
then echo abc
else echo efg
fi
我已經(jīng)$g用雙引號(hào)將引用括起來(lái);一般來(lái)說(shuō),這是一個(gè)好習(xí)慣。嚴(yán)格來(lái)說(shuō),并不需要括號(hào),因?yàn)榈膬?yōu)先級(jí)-a,并-o使得它糾正,甚至沒(méi)有他們。
請(qǐng)注意,-aand -o運(yùn)算符是testaka 的POSIX規(guī)范的一部分[,主要是為了向后兼容(例如,因?yàn)樗鼈兪莟est7th Edition UNIX 的一部分),但是POSIX將它們明確標(biāo)記為“過(guò)時(shí)”。Bash(請(qǐng)參閱條件表達(dá)式)似乎搶先了經(jīng)典和POSIX的含義,-a并-o帶有自己的接受參數(shù)的替代運(yùn)算符。
一定要小心,您可以使用更現(xiàn)代的[[運(yùn)算符,但是請(qǐng)注意,例如Bash和Korn Shell中的版本不必相同。
for g in 1 2 3
do
for c in 123 456 789
do
if [[ ( "$g" -eq 1 && "$c" = "123" ) || ( "$g" -eq 2 && "$c" = "456" ) ]]
then echo "g = $g; c = $c; true"
else echo "g = $g; c = $c; false"
fi
done
done
在Mac OS X上使用Bash 3.2.57運(yùn)行示例:
g = 1; c = 123; true
g = 1; c = 456; false
g = 1; c = 789; false
g = 2; c = 123; false
g = 2; c = 456; true
g = 2; c = 789; false
g = 3; c = 123; false
g = 3; c = 456; false
g = 3; c = 789; false
您不需要像使用引號(hào)一樣引用變量[[,[因?yàn)樗皇且韵嗤姆绞絒是單獨(dú)的命令。
這不是一個(gè)經(jīng)典的問(wèn)題嗎?
我會(huì)這么想的。但是,還有另一種選擇,即:
if [ "$g" -eq 1 -a "$c" = "123" ] || [ "$g" -eq 2 -a "$c" = "456" ]
then echo abc
else echo efg
fi
的確,如果您閱讀了該autoconf工具或相關(guān)軟件包的“便攜式外殼”指南,則建議使用“ ||”和“ &&” 這種符號(hào)。我想您甚至可以做到:
if [ "$g" -eq 1 ] && [ "$c" = "123" ]
then echo abc
elif [ "$g" -eq 2 ] && [ "$c" = "456" ]
then echo abc
else echo efg
fi
在動(dòng)作像回聲一樣瑣碎的情況下,這還不錯(cuò)。當(dāng)要重復(fù)的動(dòng)作塊為多行時(shí),重復(fù)會(huì)很痛苦,并且較早的版本之一是可取的-否則您需要將動(dòng)作包裝到在不同then塊中調(diào)用的函數(shù)中。

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊
在Bash中:
if [[ ( $g == 1 && $c == 123 ) || ( $g == 2 && $c == 456 ) ]]

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超8個(gè)贊
使用/bin/bash以下方法將起作用:
if [ "$option" = "Y" ] || [ "$option" = "y" ]; then
echo "Entered $option"
fi
- 3 回答
- 0 關(guān)注
- 6577 瀏覽
添加回答
舉報(bào)