bash: `-su:$ *:unbound variable` with` set -u`


8

これは、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

Bashマニュアル4.3.1 Set Builtinは、特にset -u$ *と$ @ を無視するように言っています:

-u未設定の変数および特殊パラメーター '@'または '*'以外のパラメーターは、パラメーター展開を実行するときにエラーとして扱います。エラーメッセージが標準エラーに書き込まれ、非対話型シェルが終了します。

どうすれば修正できますか?

回答:


11

これは、古いバージョンのbash、具体的には4.0β2パッチレベルdから4.0パッチレベルmのバグです。4.0から4.1αへの変更ログから:

n。set -u最新のPosix解釈に準拠するようにの動作を修正しました。$ @と$ *以外の設定されていない変数を展開すると、シェルが終了します。

この動作は4.0β2で導入されました。これは、以前の(現在は再び現在の)動作にバグがあると考えられていたためです:

d。-uオプションが有効になっていて、ポジティブパラメーターがない場合、$ @および$ *の展開がシェルを終了しないバグを修正しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.