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


182

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

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

#!/bin/bash
i=0
for var in "$@"
do
  i=i+1
done

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


4
このコードは、引数が存在する場合、リテラル文字列i+1を変数に格納するだけiです。
フィリップ

回答:



99
#!/bin/bash
echo "The number of arguments is: $#"
a=${@}
echo "The total length of all arguments is: ${#a}: "
count=0
for var in "$@"
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"

それも私を助けてくれました。#!/ bin / bash count = 0 sum = 0 avg = 0 in "var @" $ @ "do((sum + = $ var))((count ++))done((avg = sum / $ count))echo"数値の合計は次のとおりです。$ sum "echo"数値の平均は:$ avg "これは、未知の引数の数を取得していくつかの計算を行うのに役立ちます(オペランドを編集できます)デニスウィリアムソンに感謝しました。誰かに役立つかもしれないので、コードに投稿しています。
kaanyılmaz2016年

1
@kaanyılmaz:それに関する唯一の問題は、Bashが整数演算しか行わないことです。bc10進数が必要な場合は、AWK、などを使用する必要があります(ksh93とzshも10進数の計算を実行できます)。コードには、一部の変数のドル記号が含まれていますが、他の変数は含まれていません。それらを使用するかどうかについて一貫している必要があります。内部(())では必要ありません。ただし、echo声明には含まれています。
追って通知があるまで一時停止。

私はLinuxがあまり得意ではありません。必要に応じてコードを変更しました。基本的にはあなたのコードです
kaanyılmaz16年

コードをありがとう、それはとても良いです。
Smeterlink

12

元の参照を追加するには:

特別なパラメータから引数の数を取得できます$#。値0は「引数なし」を意味します。$#読み取り専用です。

shift引数処理と組み合わせて使用​​すると、$#Bash Builtinのたびに特別なパラメータが減少しますshiftが実行される。

見る セクション3.4.2の特殊パラメータのBashリファレンスマニュアルを。

  • 「シェルはいくつかのパラメーターを特別に扱います。これらのパラメーターは参照されるだけです。」

  • このセクションでは、キーワード$# "10進数の位置パラメータの数に展開します。"


-1

以下は簡単なものです-

猫countvariable.sh

echo "$@" |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

3
以下のように書くことができecho "$@" | awk '{print NF}'
user000001

-6

その値は変数に含まれています $#


4
4歳の回答とほぼ同じ(しかし正しい)回答があるという事実は別として、あなたの回答は間違っています$#
間違い
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.