次のコードサンプルをご覧ください:
MIN=10 if [ -n "$1" ]; then echo "$1"; fi if [ -n "$2" ]; then echo "$2"; fi if [ -n "$3" ]; then echo "$3"; fi if [ -n "$4" ]; then echo "$4"; fi if [ -n "$5" ]; then echo "$5"; fi if [ -n "$6" ]; then echo "$6"; fi if [ -n "$7" ]; then echo "$7"; fi if [ -n "$8" ]; then echo "$8"; fi if [ -n "$9" ]; then echo "$9"; fi if [ -n "${10}" ]; then echo "${10}"; fi echo "List of arguments: "$*"" echo "Name of this script: "$0"" if [ $# -lt "$MIN" ]; then echo "Not enough arguments, need $MIN to run."; fi
Forたとえば、$./new.sh q w e r t y u i o p
の最終出力は次のようになります。
q w e r t y u i o p List of arguments: q w e r t y u i o p Name of this script: ./new.sh
およびは次のようになります:
q w e r t y u i o List of arguments: q w e r t y u i o Name of this script: ./new.sh Not enough arguments, need 10 to run.
質問:-n
はどういう意味ですか?
コメント
回答
[
は、組み込みのtest
の別名です。こちらおよび here 、これ。
if
のシーケンスステートメントはおそらくループとして使用したほうがよいでしょう。 Bashでは、間接展開を使用できます。
for ((i=1 ; i <= 10 ; i++)) ; do if [ -n "${!i}" ] ; then echo "${!i}" fi done
より一般的なイディオムは、おそらくすべてでshift
を使用することです。繰り返しますが、引数リストは破棄されます。
また、引用符:ここでは$0
は引用符の外側にあります。 単語分割とファイル名拡張が明示的に必要な場合を除いて、ほとんどの場合、すべての変数展開を引用符で囲む方が便利です。
echo "Name of this script: "$0""
つまり、次のように記述します。
echo "Name of this script: $0"
コメント
- 関数内で
shift
を使用でき、呼び出し元の'の引数リストには影響しませんが、そのためだけに関数を使用するのは明らかに少しです。ハックっぽい。
help test
を読みましたか?[
や-n
のようなものは検索するのが恐ろしいです。bash -n myscript
が何をするのか疑問に思ってここに来た場合は、構文チェックを行いますスクリプトを実行する代わりに実行します。