我需要僅使用純 sh shell 來計算字串的長度。所發生的情況/bin/sh
實際上是到 bash 或其他 shell 的軟連結。因此${#STRING}
給出了字串的長度,因為它是高級 bash 功能。
有人能告訴我如何找到字串的長度嗎?我正在使用 Solaris 5.10 Sparc 架構
答案1
wc -m
計算字串中的字元數。所以你可以這樣做:
STRLENGTH=$(echo -n $STRING | wc -m)
替代語法:
STRLENGTH=`echo -n $STRING | wc -m`
echo標誌-n
阻止它列印換行符。該標誌在 Solaris 5 上可能有所不同。man echo
答案2
這裡有幾種方法可以做到這一點。
myvar="This is a test"
echo "${#myvar}"
14
或者
expr length "${myvar}"
14
答案3
使用來取得is${#string}
的長度$string
POSIX shell 參數擴展。它不是bash
唯一的功能。
在 Solaris 5.10 上,如果/bin/sh
或/usr/bin/sh
(如sh(1)
手冊)不支援此功能,那麼/usr/xpg4/bin/sh
將支援。
要在 Solaris 5.10 系統上獲得 POSIX 行為,您PATH
應該設定為
/usr/xpg6/bin:/usr/xpg4/bin:/usr/ccs/bin:/usr/bin
(按該順序),如中所述standards(5)
手動的。
答案4
我不認為“純粹的sh”可以做到這一點。但你不需要在「pure sh」中做任何事;您需要在 sh plus 標準公用程式中執行此操作。最直接的方法是:
strlength=`expr "$string" : ".*"`
(表達式是 POSIX)。或者,如果您沒有expr
(Solaris 5.1 很古老),您也可以使用廁所和...一起列印函數喜歡:
strlength=`printf "%s" "$string" | wc -m`
只是不要嘗試使用echo
,因為 echo 會添加尾隨換行符,並且沒有標準方法可以抑制它。
請注意,如果當前區域設定存在差異,則wc -m
對字元進行計數並對位元組進行計數。wc -c