この `-n`はどういう意味ですか? [BASH]

次のコードサンプルをご覧ください:

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を使用でき、呼び出し元の'の引数リストには影響しませんが、そのためだけに関数を使用するのは明らかに少しです。ハックっぽい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です