
我有這個聲明if [ ! - f "$i" -o "$i"x = "$MTR"x]
,並且想知道這個聲明能實現什麼目的。我知道第一部分檢查變數是否i
不是文件,但無法弄清楚後面的第二部分是什麼-o
(我認為它代表邏輯或)。任何幫助都會非常有幫助。
答案1
正確,-o 代表邏輯或。
比較"$i"x = "$MTR"x
與變數$i
和的內容$MTR
。
我認為將其x
添加到兩個變數中是為了避免兩個變數中的任何一個未設定或未初始化時出現問題。
答案2
假設該語句是
if [ ! -f "$i" -o "$i"x = "$MTR"x ]
檢查-f "$i"
該值是否$i
對應於常規文件(或常規文件的符號連結)。然後用 否定該測試!
。這-o
是一種過時且過時的「邏輯或」表達方式。
這些"$i"x = "$MTR"x
測試以一種有點尷尬的方式進行,這在 shell 的真正舊實作中可能是必要的sh
,測試$i
和是否$MTR
是相同的字串。
在(目前)標準sh
shell 中,該語句將寫成
if [ ! -f "$i" ] || [ "$i" = "$MTR" ]
或者,應用一點邏輯,
if [ "$i" = "$MTR" ] && [ -f "$i" ] || [ ! -f "$i" ]
換句話說:如果$i
與相同的字串$MTR
並且它們引用現有的常規文件(或指向該文件的符號連結),或者不是$i
文件名,則該語句為真。
看看這個聲明的含義可能會更有趣錯誤的。只有當$i
和$MTR
不是同一個字串時才為假和 $i
引用現有文件。