在Bash中,如何正确给关联数组的下标加引号?
如果我在Bash中声明一个关联数组,然后又想用一个下标来引用一个元素,这个下标是一个值包含空格的变量,那么应该在何时以及如何对用作下标的变量名进行引用,以使下标和元素都展开成一个单词?在下面的示例中,我演示了两种做法,虽然它们看起来语义相同,但我想遵循最佳实践,以避免潜在的错误:
declare -A prices=(
apple 1.99
banana 2.99
"peanut butter" 4.99
)
item="peanut butter"
# Which option is correct? Or do both have the same semantics?
price="${prices[$item]}"; echo $price # Option 1, prints 4.99
price="${prices["$item"]}"; echo $price # Option 2, also prints 4.99
解决方案
个人认为,我们应始终在所有字符串/脚本周围使用单引号,直到在确实需要时才使用双引号;在确实不需要引号时再使用无引号的写法。
我也发现如果把下标放在方括号里并使用赋值的写法,定义关联数组会更清晰,例如 declare -p 会把它们输出。
所以,我会这样写:
$ declare -A prices=( ['apple']='1.99' ['banana']='2.99' ['peanut butter']='4.99' )
$ declare -p prices
declare -A prices=([apple]="1.99" ["peanut butter"]="4.99" [banana]="2.99" )
$ item='peanut butter'
$ price="${prices["$item"]}"; echo "$price"
4.99
这样我就知道自己根本不需要去考虑潜在的全局匹配、单词分割等问题。
顺便提一句,应该是 echo "$price",而不是 echo $price。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。