shell中如何求字串的長度

shell中如何求字串的長度

我需要僅使用純 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}的長度$stringPOSIX 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

相關內容