2012-01-28 9 views
0

私はプロジェクトワークの一部として次のコードを書いています。私は入力文字列の;(セミコロン)の数に基づいてi値を出力する必要があります。しかし、whileループは実行されません。それはエラーを返す。私はたくさんの選択肢を試しましたが、それを理解することはできませんでした。文字列のセミコロンを数えるシェルスクリプト

あなたはこの変更する必要があり
IN="aa;bb;cc;" 
c= echo $IN | tr -dc ';' | wc -c 
echo $c 
i=1 
while [ $i -le $c ]; 
do 
    echo $i 
    i=`expr $i + 1` 
done 

答えて

1

echo $IN | tr -dc ';' | wc -cがすでにやっているだけのように実行し、その出力はc —に保存されるように

c=`echo $IN | tr -dc ';' | wc -c` 

:これに

c= echo $IN | tr -dc ';' | wc -c 

を後でiの場合:

あなたが awkを使用することができるかどう
0

はまあ、それははるかに短いと簡単です:

echo $IN | awk '{ print length(gensub("[^;]","","g",$0)) }' 
0

あなたが;の文字列を持っていたら、ループのための必要はありません。シェルは変数の文字を${#variable}で数えることができます。

$ IN="aa;bb;cc;" 
$ c=$(echo $IN | tr -dc ';') 
$ echo ${#c} 
3 
関連する問題