Bash数组键与现有变量冲突

Ben*_*vis 2 arrays bash

我的期望是bash数组中的键被解释为文字,但似乎并非如此.例如,以下按预期工作:

$ declare -a mymap
$ mymap[foo]="bar"
Run Code Online (Sandbox Code Playgroud)

没问题,我们现在有一个带键的数组,字面意思"foo".但是当我设置一个与键同名的环境变量时,我在其中放入了特殊字符,它会产生一个解析错误:

$ declare -a mymap
$ export foo=" > "
$ mymap[foo]="bar"
-bash: >: syntax error: operand expected (error token is ">")
$ mymap["foo"]="bar"
-bash: >: syntax error: operand expected (error token is ">")
$ mymap['foo']="bar"
-bash: >: syntax error: operand expected (error token is ">")
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释我在这里缺少的东西吗?我正在使用bash版本4.3.33.

Joh*_*ica 5

使用-A申报具有字符串键的关联数组.-a创建一个索引数组,其键在算术上下文中计算.

$ declare -A mymap
$ export foo=' > '
$ mymap[foo]="bar"
$ echo "${mymap[foo]}"
bar
$ declare -p mymap
declare -A mymap='([foo]="bar" )'
Run Code Online (Sandbox Code Playgroud)