[尝试增加关联数组时出现数组下标错误

问题描述 投票:1回答:1

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

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

但是当我尝试增加其值时:

$ (( 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]++ ")

我总是会遇到相同的错误。我在做什么错?

arrays bash associative
1个回答
0
投票

key名称中的单引号字符使解析器将其视为有效字符,并将其视为未终止的引号字符。解决此问题的一种方法是转义键中的'字符

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

现在由于%q说明符,printf()会将必需的转义符应用于所有shell元字符。现在您可以使用

(( dict["$escKey"]++ ))
© www.soinside.com 2019 - 2024. All rights reserved.