2013-08-30 2 views
1

У меня есть два файла в моем домашнем каталоге .phpsh и .php_history и с их именами я хотел протестировать расширение путей и как он влияет на ассоциативные массивы в bash. Результаты, которые я натолкнулся, казались странными, и я не мог объяснить их. Здесь я попробовал целую кучу вариаций.Bash массивы и расширение пути: Weird output

>my_array_filename_var=(".phpsh"=10 ".php_history" =20) 
>echo ${my_array_filename_var[.phpsh]} 
ERROR 
>echo "${my_array_filename_var[.phpsh]}" 
ERROR 
# This one below understandably doesn't work. But I was pulling my hair out. 
>echo "${my_array_filename_var[".phpsh"]}" 
ERROR 
echo "${my_array_filename_var[\".phpsh\"]}" 
ERROR 
>echo "${my_array_filename_var[.phpsh]}" 
ERROR 
>echo "${my_array_filename_var[phpsh]}" 
.phpsh=10 
>echo "${my_array_filename_var[php_history]}" 
.phpsh=10 
>echo "${my_array_filename_var[\.php_history]}" 
ERROR 

где ERROR маркер обозначает

bash: .phpsh: syntax error: operand expected (error token is ".phpsh") 

Есть ли какое-то правило, что говорит, что я не могу иметь точечный характер в моем ключе для ассоциативного массива? Как расширение пути в bash играет с этим?

ответ

5

Вы должны declare -A (capital A) ассоциативный массив в bash. Это правильный синтаксис:

$ declare -A my_array_filename_var=([.phpsh]=10 [.php_history]=20) 
$ echo "${my_array_filename_var[.phpsh]}" 
10 

Или

$ declare -A my_array_filename_var 
$ my_array_filename_var=([.phpsh]=10 [.php_history]=20) 
$ echo "${my_array_filename_var[.phpsh]}" 
10