bash 4.3の「ネイティブ」組み込み動作に対する文書化されていない変更はありますか?

bash 4.3の「ネイティブ」組み込み動作に対する文書化されていない変更はありますか?

Bash 4.2では、変数は関数に対してローカルに宣言されていますが、いいえそれでもデフォルトは変数リストに含まれます。少なくとも「declare -p」に関する限り:

vermicelli$ bash --version | grep release
GNU bash, version 4.2.37(1)-release (x86_64-pc-linux-gnu)
vermicelli$ bash -c 'f1() { local Y; declare -p Y; }; f1'
declare -- Y
vermicelli$ 

しかし、bash 4.3ではもうそうではありません。

lasagne$ bash --version | grep release
GNU bash, version 4.3.46(1)-release (x86_64-pc-linux-gnu)
lasagne$ bash -c 'f1() { local Y; declare -p Y; }; f1'
bash: line 0: declare: Y: not found
lasagne$ 

この動作の変更はどこにも文書化されていますか?

デフォルト値がある場合はい提供されている場合(たとえば、「local Y」を「local Y = 42」に変更)、両方のbashバージョンは同じように機能します。

(Bash 4.3のマニュアルページ、特に宣言とローカルの組み込み機能を扱う段落、shoptオプションcompat42とFAQ、特に4.3の新機能を扱う段落を確認しましたが、次の言及は見つかりませんでした。この動作は変わります)。

ベストアンサー1

Bash変更ログからの抜粋:

この資料では、bash-4.4-alphaのバージョンと以前のバージョンであるbash-4.3-releaseの間の変更について詳しく説明します。

3. Bashの新機能

F.宣言オプションと同様の組み込み関数は、その-p変数にまだ値が割り当てられていなくても(技術的に設定されていない)名前付き変数のプロパティを表示します。


この資料では、bash-4.3-alphaのバージョンと以前のバージョンであるbash-4.2-releaseの間の変更について詳しく説明します。

1. Bashの変更点

へへ。属性が指定されているが値が割り当てられていない変数を生成し、検索するバグを修正しdeclareました。test対応する変数が設定されていません。

関数内で呼び出すとエラーが発生しない限り、これはlocal単なるエイリアスです。declarelocal

設定されていない変数のリストはバグと見なされtypeset -pましたが、declare -pその変数をリストしたため、動作が復元されました。「十分に一般的なリクエスト」

おすすめ記事