2010-12-12 15 views
131

Bashスクリプトに渡される引数の数を調べるにはどうすればよいですか?Bashスクリプトに渡される引数の数を調べるにはどうすればよいですか?

これは私が現在持っているものです。

#!/bin/bash 
i=0 
for var in "[email protected]" 
do 
    i=i+1 
done 

は、これを行うのが、他の(良い)方法はありますか?

+3

このコードは、単に任意の引数が存在している場合、私は変数 'i'に1 '+リテラル文字列を'格納します。 – Philipp

+0

@TheConstructor:OPのレコード、つまり5.5年近くの2つの投稿と、カルマの受動的な蓄積(この質問の95%)を見てください。私は本当に彼がアクティブなユーザーと見なされるとは思っていません。しかし、彼の質問は完全に正当だったし、それは 'man bash'を行う際に同様の練習不足の人を助けた。だから生きて生きよう;-) – Cbhihe

+0

@Cbhihe私はその時に戻ってみると思った。 OPがまだ読んでいて、通知を見ている可能性があります。私は "unusung hero" - badgeを得て、通常、私の答えを受け入れる営業を思い出させようとしない。彼らのうちの一人が最終的に私の答えを受け入れるなら、まだ誇りに思うだろう。 – TheConstructor

答えて

219

引数の数が、このページのそれのための$#

検索の詳細を学ぶためにされています http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST

+14

明確にするために、C言語のような 'argc'と違って、スクリプトに渡される引数がない場合は' 0'、引数が1つの場合は '1'となります。 –

82
#!/bin/bash 
echo "The number of arguments is: $#" 
a=${@} 
echo "The total length of all arguments is: ${#a}: " 
count=0 
for var in "[email protected]" 
do 
    echo "The length of argument '$var' is: ${#var}" 
    ((count++)) 
    ((accum += ${#var})) 
done 
echo "The counted number of arguments is: $count" 
echo "The accumulated length of all arguments is: $accum" 
+4

+1例! nice – MountainX

+0

それは私も助けてくれました。 #!/ binに/ bashの 回数= 0 合計= を行っての "$ @" を行う((合計+ = $のVAR)) でVAR((カウント++))平均値= 0 ( echo "数字の合計は:$ sum" echo "平均の数字は:$ avg" これは、私に知られていない数のargを取得し、数学をするのに役立ちます(あなたはオペランドを編集してください) デニス・ウィリアムソンのおかげで、私はそれをしました。誰かにとって役に立ちそうなので、コードに投稿しています。 –

+1

@kaanyılmaz:その唯一の問題は、Bashは整数算術しかしないということです。小数点が必要な場合は、AWK、 'bc'などを使用する必要があります(ksh93とzshも小数点演算を行うことができます)。あなたのコードには、いくつかの変数のドル記号が含まれていますが、他の変数はありませんあなたはそれらを使用するかどうかに関して一貫していなければなりません。 '(())'の中には必要ありません。しかし、それらは 'echo'ステートメントの中にあります。 –

-4

値を変数$#以下

+2

4年前とほぼ同じですが正しい答えですが、あなたの答えは間違っています - それは '$# 'でなければなりません – nachteil

1

に含まれていることは簡単なものです -

cat countvariable.sh

echo "[email protected]" |awk '{for(i=0;i<=NF;i++); print i-1 }' 

出力:

#./countvariable.sh 1 2 3 4 5 6 
6 
#./countvariable.sh 1 2 3 4 5 6 apple orange 
8 
+0

' echo "$ @"として書くことができます。 awk '{print NF}' ' – user000001

関連する問題