Bash: `-su: $*: バインドされていない変数` と `set -u`

Bash: `-su: $*: バインドされていない変数` と `set -u`

これはGNU bashバージョン4.0を実行するFreeBSD 7.xシステムです。

Bashでは、このset -uオプションは、次のように設定されていない変数が見つかったときにシェルにエラーを印刷するように強制します。

$ set -u
$ echo $THISISUNSET
-su: THISISUNSET: unbound variable
$ echo $?
1

ただし、$*でも同じエラーが発生します。

$ echo $*
-su: $*: unbound variable
$ echo $?
1
$ echo $@
-su: $@: unbound variable

バッシュマニュアル4.3.1 組み込みコレクション特にset -u$ *と$ @は無視されます。

-uパラメーター拡張を実行すると、設定されていない変数と特殊パラメーター「@」または「*」以外のパラメーターをエラーとして処理します。エラーメッセージが標準エラーに書き込まれ、非対話型シェルが終了します。

この問題をどのように解決できますか?

ベストアンサー1

これは、以前のバージョンのbash、特に4.0β2パッチレベルdから4.0パッチレベルmまでのバグです。 ~から変更ログ4.0から4.1αへ:

名詞set -u最新のPosixに準拠するように動作が修正されました。説明: $@ および $* 以外の未設定変数を拡張するたびに、シェルは終了します。

この動作は、以前(そして現在の)動作が問題があると見なされたため、4.0β2で導入されました。

d。 -u オプションが有効で位置引数がない場合、$@ および $* 拡張がシェルを終了できないバグを修正しました。

おすすめ記事