我剛剛開始學習shell,當我在這個簡單的代碼中遇到語法錯誤時,我感到非常困惑:
str="Hello world!"
echo $(expr length "$str")
但是這段代碼實際上可以在 Ubantu 上運行。是因為我的 bash 版本過時了嗎?還是MacOS系統的問題?
我已經更新了我的 bash 版本,現在是 GNU bash 5.1.16,但是這個問題仍然存在。我現在真的很困惑。
uj5u.com熱心網友回復:
expr在 MacOS 上不接受這個論點length。手冊頁包含這個相當傾斜的段落:
根據 POSIX 標準,使用字串引數
length、substr、index或match會產生未定義的結果。在這個版本的 中expr,這些引數被視為它們各自的字串值。
換句話說,expr length簡單地回傳length并且expr length "$str"是一個語法錯誤,因為expr只接受一個引數。
這真的不是問題,因為 Bash 腳本基本上根本不需要使用expr。Bash 具有內置功能,可以或多或少地取代所有遺留expr邏輯。
要在 Bash 中獲取字串的長度,請嘗試
${#str}
更多資訊,可能從Bash 中的引數擴展開始。
expr是一個獨立于你的 shell 的作業系統實用程式,所以你使用哪個版本的 Bash,或者實際上你是否使用 shell 并沒有任何區別。
如果您發現自己需要在 POSIX sh/ Bourne shell 腳本中以可移植的方式獲取字串的長度,也許可以求助于 Awk。
len=$(printf '%s\n' "$str" | awk '{ print(length($0)) }')
(如果包含多行,這將列印多個數字str。如果您需要找到嵌入換行符的字串的總長度,則不難更改它,但我猜我們不需要去那里。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/455986.html
上一篇:檢查服務是否在Linux中安裝
下一篇:在14位計數后洗掉每個數字
