簡體   English   中英

Bash. 為什么條件不正確的“while”語句有效?

[英]Bash. Why "while" statement with incorrect condition works?

while ['qwe'='rty']
do
echo yes
done

條件顯然不正確,但終端無限期地打印“是”。 為什么會這樣?

條件明顯不對...

不,它真的不是(1)

bash的條件(包括通過(2)[]字符與條件分隔開的“命令”空格)中需要空格,以便將條件解釋為三部分測試。

您提供的內容(假設上述缺少的命令空格是一個簡單的拼寫錯誤)被視為單部分測試,只要它不是空字符串,它就是正確的。

你可以看到下面的區別:

pax> [ 'abc' = 'xyz' ] && echo yes

pax> [ 'abc' = 'xyz' ] || echo no
no

pax> [ 'abc'='xyz' ] && echo yes
yes

bash手冊頁的相關部分有這個(注意相等檢查中的空格,它們不僅僅是用於在手冊頁本身中分隔標記):

string
-n string

如果字符串的長度不為零,則為真。

string1 == string2
string1 = string2

如果字符串相等則為真。 =應與 POSIX 一致性test命令一起使用。

換句話說,你應該擁有的while語句是:

while [ 'qwe' = 'rty' ]

(1)好吧,從技術上講,這不正確的,但不是你的意思(錯誤)。 相反,它是不正確的,因為它不是您認為的表達方式:-)


(2)如果沒有這些命令空格,您將看到如下語法錯誤:

pax> ['abc' = 'xyz'] && echo yes
[abc: command not found

pax> ['abc'='xyz'] && echo yes
[abc=xyz]: command not found

當然,除非您實際上一個名為[abc=xyz]的可執行目標,在這種情況下它將被執行並且返回值將決定采取什么行動。 這是一個不太可能的可執行目標,但它可能的:

pax> echo true > '[abc=xyx]' ; PATH=$PATH:.

pax> ['abc'='xyx'] && echo yes
yes

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM