2014-12-03 3 views
5

Я использую 4.2.53 (1) -release, который находится в ведении Fedora 20.«объявить -A х» против «объявить -A х =()»

Следующие два фрагмента кода ведут себя по-разному, может кто-нибудь сказать почему? Благодарю.

[hidden]$ unset x; declare -p x; function f() { declare -A -g x; x[10]=100; }; f; declare -p x; 
-bash: declare: x: not found 
declare -A x='([10]="100")' 
[hidden]$ unset x; declare -p x; function f() { declare -A -g x=(); x[10]=100; }; f; declare -p x; 
-bash: declare: x: not found 
declare -A x='()' 

ответ

5

Это была ошибка в 4.0-4.2. Это было fixed in 4.3:

ddd. Fixed several bugs that caused `declare -g' to not set the right global 
    variables or to misbehave when declaring global indexed arrays. 

Вот результат на 4.3, где они ведут себя одинаково:

$ echo $BASH_VERSION 
4.3.11(1)-release 

$ unset x; declare -p x; function f() { declare -A -g x; x[10]=100; }; f; declare -p x; 
bash: declare: x: not found 
declare -A x='([10]="100")' 

$ unset x; declare -p x; function f() { declare -A -g x=(); x[10]=100; }; f; declare -p x; 
bash: declare: x: not found 
declare -A x='([10]="100")' 
Смежные вопросы