純粋なshシェルのみを使用して文字列の長さを計算する必要があります。何が起こっているのですか/bin/sh
は、実際にはbashまたは別のシェルへのソフトリンクです。したがって、${#STRING}
は、拡張bash機能であるため、文字列の長さを示します。
誰かが文字列の長さを見つける方法を教えてもらえますか? Solaris 5.10 Sparcアーキテクチャを使用しています
wc -m
は、文字列内の文字をカウントします。だからあなたは次のようなことをすることができます:
STRLENGTH=$(echo -n $STRING | wc -m)
代替構文:
STRLENGTH=`echo -n $STRING | wc -m`
エコーの-n
フラグは、エコーが改行を出力しないようにします。フラグはSolaris 5では異なる場合があります。man echo
を確認してください
いくつかの方法があります。
myvar="This is a test"
echo "${#myvar}"
14
または
expr length "${myvar}"
14
_${#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)
manual で説明されています。
ここにいくつかの方法があります:
echo ${#VAR}
echo -n $VAR | wc -m
echo -n $VAR | wc -c
printf $VAR | wc -m
expr length $VAR
expr $VAR : '.*'
http://techopsbook.blogspot.in/2017/09/how-to-find-length-of-string-variable.html
「ピュアsh」では出来ないと思います。しかし、「純粋なsh」では何もする必要はありません。 shと標準ユーティリティでそれを行う必要があります。最も簡単な方法は次のとおりです。
strlength=`expr "$string" : ".*"`
( expr はPOSIXです)。または、expr
がない場合(Solaris 5.1は古い)、次のように wc と printf を併用することもできます。
strlength=`printf "%s" "$string" | wc -m`
echo
を使用しようとしないでください。エコーによって後続の改行が追加され、それを抑制する標準的な方法がないためです。
ご了承ください wc -m
は文字をカウントし、wc -c
現在のロケールに違いがある場合、バイトをカウントします。
set var = "test test test";
echo $%var;
14
(すでに多くの回答がありますが、直感的ではないと感じているので、一目でわかるように1つ追加します)
シェル(bash)コマンドライン(またはスクリプト)。
次のいずれかの方法を使用できます。
echo -n
とwc -m
を使用printf
およびwc -m
を使用します例
# 5
echo -n hello | wc -m
# 11
echo -n "hello world" | wc -m
# 5
printf "hello" | wc -m
# 11
printf "hello world" | wc -m
# 11
printf "hello %s" world | wc -m
ヒント:
echo
はデフォルトで末尾に新しい行を追加するため、これを回避するには-n
オプションが必要です。