gpt4 book ai didi

bash - 从函数 : Why does "declare -A foo=$(bar)" work but not "declare -A foo; foo=$(bar)"? 的输出创建 Bash 关联数组

转载 作者:行者123 更新时间:2023-12-04 11:51:36 25 4
gpt4 key购买 nike

考虑以下 bash 片段。在其中,我以不同的方式创建两个关联数组,然后打印其中一个条目。
场景一。在一个语句中声明和赋值。按预期工作:

make_person() { echo '([firstName]=Bob [lastName]=Black)'; }
declare -A person1=$(make_person)
echo "${person1[firstName]}"
输出:
Bob
场景二。在两条不同的行上声明和分配。无输出:
declare -A person2
person2=$(make_person)
echo "${person2[firstName]}"
输出:
为什么场景1能成功打印 [firstName]进入而场景 2 没有?两个场景都定义了和预期的行为吗?

最佳答案

因为 declare re-interprets and parses the arguments检测 ( )在变量赋值中,然后进行数组赋值。而在正常分配中 var=anything总是一个正常的赋值,在 var=(anything) ( )检测到 when parsing the expression (当 bash 读取要执行的行/输入时)。 declare更像是 eval ,它重新评估输入。

What is the bash specific reason that Scenario 1 succeeds in printing the [firstName] entry, and Scenario 2 does not?


“bash 特定原因”是我猜它是这样编程的。原因也是为了兼容POSIX,所以 var=$(anything)应该像 POSIX 一样产生一个正常的变量。

Are both scenarios defined


“定义”有点太多了,我在 bash 文档中没有看到关于这个特定语法的太多内容,但是

and expected behaviour?


是的,这是按预期工作的。

关于bash - 从函数 : Why does "declare -A foo=$(bar)" work but not "declare -A foo; foo=$(bar)"? 的输出创建 Bash 关联数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68035346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com