這個問題在這里已經有了答案: 為什么一個變數對多個值的不等式檢查總是回傳真? (3 個回答) 3天前關閉。
我正在嘗試撰寫一個簡單的 bash 腳本來檢查字串是否值不是“rpm”或“jar”。但它似乎總是評估為真。我不確定我錯過了什么。
#!/bin/bash
FILE_EXTENSION="rpm"
if [ "$FILE_EXTENSION" != "jar" ] || [ "$FILE_EXTENSION" != "rpm" ];
then
echo "File type is NOT rpm or jar";
else
echo "File type is rpm or jar";
fi
echo "Debug: FILE_EXTENSION value is $FILE_EXTENSION"
在我的本地運行它會低于輸出。即使 FILE_EXTENSION 變數設定為“rpm”,它也會評估為 true
$ ./check3.sh
File type is NOT rpm or jar
Debug: FILE_EXTENSION value is rpm
$
uj5u.com熱心網友回復:
你對邏輯感到困惑。如果a為真并且您不關心b,則a OR b為真;當b為真時它為真,然后你不需要關心a 的值。 解決您的問題的簡單方法是切換到顯然是您想要檢查的內容。&&
事實上,我也更喜歡一個case陳述句,因為它看起來更容易(一旦你超越了case陳述句本身的語法,如果你不熟悉它可能會令人不安)。
case $file_extension in
rpm | jar) echo "File type is rpm or jar";;
*) echo "File type is not rpm or jar";;
esac
另請參閱正確的 Bash 和 shell 腳本變數大寫;出于這個原因,我改用小寫字母。
uj5u.com熱心網友回復:
那是因為您使用的是or( ||) 而不是and( &&)。目前您正在檢查是否:
rpm != jar -> True
rpm != rpm -> False
True or False => True and you get "File type is NOT rpm or jar"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/493729.html
