web-dev-qa-db-ja.com

コマンドにパラメーターが指定されていないかどうかを確認するにはどうすればよいですか?

$*は空ですか?つまり、コマンドに引数が指定されていないかどうかを確認するにはどうすればよいですか?

81
well actually

コマンドに引数が指定されていないかどうかを確認するには、$#変数の値を確認します。

if [ $# -eq 0 ]; then
    echo "No arguments provided"
    exit 1
fi

$*好ましくない)を使用したい場合は、

if [ "$*" == "" ]; then
    echo "No arguments provided"
    exit 1
fi

いくつかの説明:

2番目の方法は、位置パラメータ展開では*が1から始まる位置パラメータに展開されるため、お勧めできません。二重引用符で囲まれた展開は、IFS特殊変数の最初の文字で区切られた各パラメーターの値を使用して単一のWordに展開されます。つまり、文字列が作成されます。したがって、余分なオーバーヘッドがあります。

一方、#は定位置パラメーターの数に展開されます。

例:

$ command param1 param2

ここに、

IFSが設定されていない場合、$#の値は2であり、$*の値は文字列 "param1 param2"(引用符なし)です。 IFSが設定されていない場合、パラメーターはスペースで区切られるため

詳細については、man bashおよびという名前のトピックを参照してください特殊パラメーター

123
Sachin Divekar

特定の引数が欠落している場合にのみベイル処理に関心がある場合は、 Parameter Substitution が最適です。

#!/bin/bash
# usage-message.sh

: ${1?"Usage: $0 ARGUMENT"}
#  Script exits here if command-line parameter absent,
#+ with following error message.
#    usage-message.sh: 1: Usage: usage-message.sh ARGUMENT
16
Pat