我正在撰寫一個 bash 代碼,我希望用戶使用 zenity 選擇一個檔案夾。問題是,如果檔案夾名稱中包含一些空格,則選擇將失敗,但腳本將繼續(我不想要)。這就是為什么我在退出腳本之前嘗試告訴用戶出了點問題。
inputStr=$(zenity --file-selection --directory "${HOME}")
cd $inputStr || zenity --error --width=300 --height=100 --text "The folder name must not contain spaces." && exit
這在選擇失敗時有效。但事實是,選擇很好時它也會退出腳本。我嘗試用?||?替換?&&? 因為我以為我誤解了一些東西,但是無論選擇是否失敗,它都會運行代碼。
有人有想法嗎?
uj5u.com熱心網友回復:
在 shell 中,||具有&&相同的優先級,并在單個串列中從左到右進行評估。您期望它被決議和評估為cd $inputstr || (zenity ... && exit),但它實際上被評估為(cd $inputstr || zenity ...) && exit。因此,只要其中一個 cd或成功,您的腳本就會退出,而不是在失敗時zenity呼叫zenity并退出。cd
zenity即使出于任何原因失敗,您也可能還想退出:使用;,而不是&&。
永遠不要混合&&和||在同一個串列中。相反,請使用正確的if陳述句。
if ! cd "$inputstr"; then
zenity ...
exit
fi
uj5u.com熱心網友回復:
謝謝大家的答案。它終于起作用了!
這個練習幫助我理解了這些&&,||而且還不清楚如何使用它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/412230.html
標籤:
