我可以创建一个关联数组,并为其中包含单引号的键分配一个整数:
$ 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]++ ")
我总是会遇到相同的错误。我在做什么错?
key
名称中的单引号字符使解析器将其视为有效字符,并将其视为未终止的引号字符。解决此问题的一种方法是转义键中的'
字符
key="john's"
printf -v escKey "%q" "$key"
现在由于%q
说明符,printf()
会将必需的转义符应用于所有shell元字符。现在您可以使用
(( dict["$escKey"]++ ))