パラメータ置換とエラーメッセージ:行番号インジケータを抑制します。

パラメータ置換とエラーメッセージ:行番号インジケータを抑制します。

私のサンプルファイルは次のとおりです。

!/bin/bash
# argument-one

# Is first argument missing?

# First method
[[ "$1" == "" ]] && echo "Usage: $(basename $0) filename"; exit 1

# Second method
# filename=${1?"Usage: $(basename $0) filename"}

上記のスクリプトでは「きれいな」メッセージを受け取りました。

Usage: argument-one filename

引数なしで上記のスクリプトを実行すると、きちんと終了します。

ただし、7行をコメントアウトして10行のコメントを削除すると、プログラムは次のエラーメッセージで終了します。

./argument-one: line 10: 5: Usage: argument-one filename

このメッセージは、プログラムを終了させるプログラムに問題があることを示します。実際は使用問題である引数のない呼び出しでした。

ただし、10行目がより簡潔で、可能であれば変数も割り当てられるので、より良いです。

私の質問は、「メッセージ部分のみを保持し、./argument-one: line 10: 5:メッセージ部分を使用してフィルタリングまたは無効にする方法は何ですか?」です。

ありがとうございます。

ベストアンサー1

特殊変数を使用して、$#特定のコマンドの引数の数をテストできます。

usage() {
  echo "Usage: $0 arg"
  exit 1
}

if [[ "$#" -eq 0 ]]; then
  usage
fi

echo "called with $1"
exit 0

実行されると、スクリプトは以下を提供します。

$ ./foo.sh
Usage: ./foo.sh arg

$ ./foo.sh bar
called with bar

おすすめ記事