考虑以下bash片段。在其中,我以不同的方式创建了两个关联数组,然后打印了一个条目。
情况1。 声明并在一条语句中赋值。按预期工作:
make_person() { echo '([firstName]=Bob [lastName]=Black)'; }
declare -A person1=$(make_person)
echo "${person1[firstName]}"
输出:
Bob
情景2. 声明和赋值分两行。没有输出:
declare -A person2
person2=$(make_person)
echo "${person2[firstName]}"
输出:
为什么场景1成功打印
[firstName]
,而场景2则不行?两个场景是否都定义且预期行为?
$(make_person)
,因此declare
接收到一个合法的复合赋值。在情况2中,由于等号后面没有跟着开括号,所以该赋值被视为标量,并且扩展是在之后执行的。 - oguz ismail