whileループで始まるシェルスクリプトがあります
while [ -n "$1" ]; do
私はそれが$1
スクリプト名の後ろのパラメータを参照していることを知っています。つまり、firstargument
スクリプトを実行するときです./myscript.sh firstargument
。それは何をしますか-n
?
答え1
-n
空でない文字列のテストです。
拡張が空の文字列の場合、"$1"
その特定のテストは失敗し、ループは実行されません。
これは可能ループの本文には、shift
次の位置引数を移動するステートメントが含まれており、$1
この方法で空の引数が見つかるか、引数リストの終わりに達するまでスクリプト引数を繰り返します。
このtest
ユーティリティは同じです[
が、[
最後の引数が必要です]
。
テストは次のように書くこともできます。
while test -n "$1"; do
[
そしておそらくtest
シェルに組み込まれているが/bin
。
man test
このテストと他のテストの詳細については、シェルマニュアル(組み込みユーティリティなので)で読むことができます。
今回の-n
試験もその一つです。基準テストを実行するので、次の項目にもリストされます。test
ユーティリティ用POSIX規格。
もしこのサイクルは終わらなければなりませんみんな引数が空の場合、これを行わない可能性があるシェルスクリプトの引数:
$ sh -c 'while [ -n "$1" ]; do printf "arg: %s\n" "$1"; shift; done' sh 1 2 3 "" 4 5 6
arg: 1
arg: 2
arg: 3
代わりに、次のようなものを使用する必要があります。
for arg do
if [ -n "$arg" ]; then
# do something with "$arg"
fi
done
...明らかにスクリプトの機能によって異なります。