純粋な sh シェルのみを使用して文字列の長さを計算する必要があります。実際には、これは/bin/sh
bash または別のシェルへのソフト リンクです。したがって、${#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/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」ではそれができないと思います。しかし、「純粋な sh」では何もする必要はありません。sh と標準ユーティリティでそれを行う必要があります。最も簡単な方法は次のとおりです。
strlength=`expr "$string" : ".*"`
(式POSIXです。または、持っていない場合expr
(Solaris 5.1は古いです)、トイレ一緒にプリントのように:
strlength=`printf "%s" "$string" | wc -m`
echo
echo は末尾に改行を追加し、それを抑制する標準的な方法はないため、を使用しないでください。
現在のロケールに違いがある場合は、wc -m
文字数をカウントし、バイト数をカウントすることに注意してください。wc -c