1

.phpshホームディレクトリに2つのファイルがあり.php_history、それらの名前を使用して、パス名の展開と、それが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 でのパス名展開はこれとどのように関係していますか?

4

1 に答える 1

5

declare -Abash では連想配列 (大文字の A) を使用する必要があります。これは正しい構文です。

$ 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
于 2013-08-30T16:45:42.927 に答える