web-dev-qa-db-ja.com

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

純粋なshシェルのみを使用して文字列の長さを計算する必要があります。何が起こっているのですか/bin/shは、実際にはbashまたは別のシェルへのソフトリンクです。したがって、${#STRING}は、拡張bash機能であるため、文字列の長さを示します。

誰かが文字列の長さを見つける方法を教えてもらえますか? Solaris 5.10 Sparcアーキテクチャを使用しています

9
Niraj

wc -mは、文字列内の文字をカウントします。だからあなたは次のようなことをすることができます:

STRLENGTH=$(echo -n $STRING | wc -m)

代替構文:

STRLENGTH=`echo -n $STRING | wc -m`

エコーの-nフラグは、エコーが改行を出力しないようにします。フラグはSolaris 5では異なる場合があります。man echoを確認してください

13
Peter Lamby

いくつかの方法があります。

myvar="This is a test"
echo "${#myvar}"
14

または

expr length "${myvar}"
14
9
R J

_${#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 で説明されています。

2
Kusalananda

ここにいくつかの方法があります:

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

2
Mukesh Shakya

「ピュアsh」では出来ないと思います。しかし、「純粋なsh」では何もする必要はありません。 shと標準ユーティリティでそれを行う必要があります。最も簡単な方法は次のとおりです。

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

expr はPOSIXです)。または、exprがない場合(Solaris 5.1は古い)、次のように wcprintf を併用することもできます。

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

echoを使用しようとしないでください。エコーによって後続の改行が追加され、それを抑制する標準的な方法がないためです。

ご了承ください wc -mは文字をカウントし、wc -c現在のロケールに違いがある場合、バイトをカウントします。

1
Jan Hudec

set var = "test test test";

echo $%var;

14

0
user874816

(すでに多くの回答がありますが、直感的ではないと感じているので、一目でわかるように1つ追加します)

シェル(bash)コマンドライン(またはスクリプト)

次のいずれかの方法を使用できます。

  • echo -nwc -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オプションが必要です。
  • 入力文字列の間にスペースがある場合は、それを引用する必要があります。
0
Eric Wang