web-dev-qa-db-ja.com

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

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

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

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

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

160
sabri

引数の数は$#です

詳細については、このページで検索してください。 http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST

257
zsalzbank
#!/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"
96

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

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

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

.4.2特殊パラメーター セクションの Bash Reference Manual を参照してください。

  • 「シェルはいくつかのパラメーターを特別に扱います。これらのパラメーターは参照のみ可能です

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

7
Michael Brux

以下は簡単なものです-

cat 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
0
VIPIN KUMAR