gpt4 book ai didi

bash - 尝试增加关联数组元素时出现错误的数组下标错误

转载 作者:行者123 更新时间:2023-12-03 18:05:19 25 4
gpt4 key购买 nike

我可以创建一个 关联数组 并为包含 的键分配一个整数单引号在里面:

$ declare -A dict
$ var="john's"
$ dict[$var]=1
$ echo ${dict[$var]}
1
$ declare -p dict
declare -A dict=(["john's"]="1" )

但是当我尝试增加它的值(value)时:

$ (( dict[$var]++ ))
bash: ((: dict[john's]++ : bad array subscript (error token is "dict[john's]++ ")
$ (( dict["$var"]++ ))
bash: ((: dict[john's]++ : bad array subscript (error token is "dict[john's]++ ")
$ (( dict["${var}"]++ ))
bash: ((: dict[john's]++ : bad array subscript (error token is "dict[john's]++ ")

我总是得到同样的错误。我究竟做错了什么?

最佳答案

key中的单引号name 导致解析器将其视为未终止的引号字符。解决此问题的一种方法是逃避 '键中的字符

key="john's"
printf -v escKey "%q" "$key"

现在因为 %q说明符, printf() 会将所需的转义应用于所有 shell 元字符,即使其“shell-quoted”并且可重用。如果打印 escKey 的内容您会注意到 '逃脱
printf '%s\n' "$escKey"
john\'s

现在您可以在关联数组中使用此键名。请记住,您始终可以手动添加可能会很乱的转义符。自 %q是 shell 提供的一种本地方式,使用它非常安全。
(( dict["$escKey"]++ ))

也在 bash版本 >= 4.4 parameter expansion@Q这是 %q 的快捷方式 printf() 的说明符使用你可以做的
(( dict["${key@Q}"]++ ))

关于bash - 尝试增加关联数组元素时出现错误的数组下标错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61701799/

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