簡體   English   中英

bash shell 中的多個條件

[英]multiple conditions in bash shell

我在 Bash 中有這段代碼,目標是比較兩個文件,如果文件匹配並且沒有傳遞強制參數,則退出。 其他方式它應該繼續......

但是當我在沒有參數的情況下運行並且腳本沒有按預期停止時出現此錯誤[: :=: unexpected operator ,當我傳遞強制參數時,它可以正常工作。 請問有什么想法嗎?

if    cmp -s  file1  file2  &&  [ $1 != "-f" ] ;  then 
"do something"
exit 1
else "do something"
fi

[... ]只是一個普通的命令,本質上等同於test 因此,如果您傳遞一個未加引號的空變量(例如$1 ,當您的程序沒有提供 arguments 時),它將嘗試運行[ != "-f" ] ,這會給出該錯誤,因為您需要兩個邊來比較!=

要解決這個問題,您可以使用[[... ]] (需要bash ,不兼容 POSIX),它不會使未引用的變量“消失”,或者您也可以引用您的變量以使其與 POSIX 兼容:

cmp -s file1 file2 && [[ $1 != "-f" ]]
cmp -s file1 file2 && [ "$1" != "-f" ]

暫無
暫無

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

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