Bashスクリプトに渡された引数の数を確認するにはどうすればよいですか?
これは私が現在持っているものです:
#!/bin/bash
i=0
for var in "$@"
do
i=i+1
done
これを行う他の(より良い)方法はありますか?
Bashスクリプトに渡された引数の数を確認するにはどうすればよいですか?
これは私が現在持っているものです:
#!/bin/bash
i=0
for var in "$@"
do
i=i+1
done
これを行う他の(より良い)方法はありますか?
回答:
引数の数は $#
詳細については、このページで検索してください:http : //tldp.org/LDP/abs/html/internalvariables.html#ARGLIST
argc
Cのような言語では、$#
となります0
引数がない場合は、スクリプトに渡された1
一つの引数、などがある場合
#!/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"
bc
10進数が必要な場合は、AWK、などを使用する必要があります(ksh93とzshも10進数の計算を実行できます)。コードには、一部の変数のドル記号が含まれていますが、他の変数は含まれていません。それらを使用するかどうかについて一貫している必要があります。内部(())
では必要ありません。ただし、echo
声明には含まれています。
元の参照を追加するには:
特別なパラメータから引数の数を取得できます$#
。値0は「引数なし」を意味します。$#
読み取り専用です。
shift
引数処理と組み合わせて使用すると、$#
Bash Builtinのたびに特別なパラメータが減少しますshift
が実行される。
見る セクション3.4.2の特殊パラメータのBashリファレンスマニュアルを。
「シェルはいくつかのパラメーターを特別に扱います。これらのパラメーターは参照されるだけです。」
このセクションでは、キーワード$# "10進数の位置パラメータの数に展開します。"
以下は簡単なものです-
猫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
echo "$@" | awk '{print NF}'
i+1
を変数に格納するだけi
です。