シェル内の文字列の長さを見つける方法

シェル内の文字列の長さを見つける方法

純粋な sh シェルのみを使用して文字列の長さを計算する必要があります。実際には、これは/bin/shbash または別のシェルへのソフト リンクです。したがって、${#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

${#string}長さを取得する$stringにはPOSIXシェルパラメータ拡張。これはbashのみの機能ではありません。

Solaris 5.10では、/bin/shまたは/usr/bin/shsh(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」ではそれができないと思います。しかし、「純粋な sh」では何もする必要はありません。sh と標準ユーティリティでそれを行う必要があります。最も簡単な方法は次のとおりです。

strlength=`expr "$string" : ".*"`

POSIXです。または、持っていない場合expr(Solaris 5.1は古いです)、トイレ一緒にプリントのように:

strlength=`printf "%s" "$string" | wc -m`

echoecho は末尾に改行を追加し、それを抑制する標準的な方法はないため、を使用しないでください。

現在のロケールに違いがある場合は、wc -m文字数をカウントし、バイト数をカウントすることに注意してください。wc -c

関連情報