2013-08-30 50 views
1

我在我的主目錄.phpsh.php_history有兩個文件,並使用它們的名字我想測試路徑名的擴展以及它如何影響bash中的關聯數組。我遇到的結果似乎很奇怪,我不能解釋它們。我在這裏嘗試了一大堆變化。Bash數組和路徑名擴展:奇怪的輸出

>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(大寫字母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