Bashシェルスクリプトのパラメータ位置の横にあるハイフンは何をしますか?いいね${1-}

Bashシェルスクリプトのパラメータ位置の横にあるハイフンは何をしますか?いいね${1-}

このコードが見つかりましたここ:

#!/bin/bash

# ...

if [[ "${1-}" =~ ^-*h(elp)?$ ]]; then
    echo "Usage..."
    exit
fi

-h引数が渡されると(たとえば、、、、、--help-help使用情報を印刷するものがわかります。-------help

しかし、なぜ"${1-}"だけでなく"${1}"?ハイフンは何をしますか?

最初は、これが位置1から始まるすべての主張を意味できると思いました。そうしてみたんですけど、そうではありませんね。

それからオタイルかもしれないと思い、作者は"${1-9}"すべての数字の位置を許可しようとしました。繰り返しますが、うまくいかず、有効なコードではありません。

答え1

パラメーター拡張のハイフンを使用すると、デフォルト値を指定できます。。したがって、${1-}「設定されている場合は最初の引数の値、それ以外の場合は空の文字列」を意味します。

設定されていない変数はとにかく空の文字列に展開されるため、これは特に役に立たないようです。ただし、有効にして引数が指定されない場合は、${1}代わりにエラーが発生します。したがって、一部のシェルプログラマーは、正当に設定されていない変数を参照するときに常にこの型を使用します。set -u${1-}

このエントリを見つけたウェブサイトの文脈では、これは「thing」番号5と一致します。

  1. .youを使用することを好みますset -o nounset可能そうしないのには十分な理由がありますが、常に設定しておくのが一番良いと思います。

    • これにより、設定されていない変数にアクセスするとスクリプトが失敗します。変数名の綴りエラーによって意図しない恐ろしい結果が発生しないようにしてください。
    • 設定または設定されていない変数にアクセスするには、"${VARNAME-}"代わりに使用し"$VARNAME"てください。

関連情報