2017-06-15 9 views
0

具体的にはBashバージョン4.0.0では、が有効になっている場合に空の変数[email protected]を使用してアンバウンドの可変エラーを発生させることはできませんか?

は、次のことを考えてみましょう:

[email protected]:~ $ ./test.sh 

echo "$BASH_VERSION" 
+ echo '4.0.0(1)-release' 
4.0.0(1)-release 
echo "${BASH_VERSINFO[@]}" 
+ echo 4 0 0 1 release x86_64-unknown-linux-gnu 
4 0 0 1 release x86_64-unknown-linux-gnu 

main() { 
    printf '%q\n' "${@:-}" 
} 

main "${@:-}" 
./test.sh: line 12: [email protected]: unbound variable 

私は唯一のBashバージョン4.0.0で、この動作を参照してください。私は、引数の空のセットを提供する場合

#!/usr/bin/env bash-4.0.0-1 

set -xvu 

echo "$BASH_VERSION" 
echo "${BASH_VERSINFO[@]}" 

main() { 
    printf '%q\n' "${@:-}" 
} 

main "${@:-}" 

は私に次のような出力を提供します。

私は、変数置換${@:-}を使用すると、これを回避することができますが、そうは思われませんでした。

これを回避する方法はありますか?

+0

あなたは、単純にアップグレードしないための重大な理由を持っていますか'bash'の新しいバージョンですか?この時点で4.0.0は8歳以上であり、4つのリリースが古くなっています。 macOSの特別なケースが3.2に固執していないのであれば、4.3ではなく、少なくとも4.2を使用することを誰も躊躇しないと思います。 – chepner

+1

もう1つの回避策は、あなたのスクリプトが合理的にデバッグされたら 'set -u'を単に止めることです。単純なタイプミス以外の理由で変数が設定されていないことが懸念される場合は、使用する前に明示的にチェックしてください。 – chepner

答えて

関連する問題