目前,我正在學習 bash。我想知道[ "abc" < $bar ]命令是什么意思。我知道[]比較或測驗它們的值。<但是運算子是如何在abc字串和$bar變數之間作業的,你能描述一下嗎?
uj5u.com熱心網友回復:
[ "abc" < $bar ]看起來像是程式員的錯誤。我們可以將其重寫為[ "abc" ] < $bar具有完全相同的含義。
<是一個重定向運算子,用于從名為$bar. [命令忽略標準輸入,因此任何輸入都將被忽略。如果$bar變數為空,它將寫入一條bash: $bar: ambiguous redirect訊息。
然后[ "abc" ]檢查是否abc是非空字串。它不是空字串,因此[ "abc" ]回傳零退出狀態意味著成功。
如果代碼的作者打算按字典順序比較字串,他應該寫成[[ "abc" < "$bar" ]]. 該[命令不支持<運算子(請參閱POSIX standard,事實上 POSIX 提到它不包括在內。)。在 Bash 中,[ "abc" '<' "$bar" ]會起作用,因為[它是內置別名test(請參閱 的輸出help [),并且內置test命令確實實作了字串比較運算子<和>。但/usr/bin/[ a '<' b ]命令結果為/usr/bin/[: ‘<’: binary operator expected. [ 外部命令不支持<。
此外,$bar沒有被參考,所以結果$bar經歷了分詞和檔案名擴展,這看起來像另一個錯誤。請記住通過 shellcheck 檢查您的腳本。
[ "abc" < $bar ]
^-- SC2073 (error): Escape \< to prevent it redirecting (or switch to [[ .. ]]).
^--^ SC2086 (info): Double quote to prevent globbing and word splitting.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/536830.html
標籤:狂欢
