我正在尝试向数组添加文件夹路径。我在网上查了一下,看到了这个解决方案。我试了一下,但收到了一条错误消息。
我的代码:
LOCALSITES=()
for d in "$DIRLOC"/*; do
${LOCALSITES}+='foo' #doesnt work
done
echo "${LOCALSITES[*]}"
错误消息:
showSites.sh: line 35: +=: command not found
${LOCALSITES}+='foo'
将解释该变量的当前值,给您一个空字符串,因此将命令读取为:
+='foo'
如果你事先做set -x
,你可以看到这一点:
pax:~$ set -x ; ${xx}+='foo' ; set +x
+ set -x
+ +=foo
+ '[' -x /usr/lib/command-not-found ']'
+ /usr/lib/command-not-found -- +=foo
+=foo: command not found
+ return 127
+ set +x
这与没有什么不同
pax:~$ xx=1
pax:~$ ${xx}=2 # should be xx=2
1=2: command not found
要正确地附加到数组,您需要执行以下操作:
LOCALSITES+=('foo')
您可能想考虑的其他事情,由Gordon Davisson在评论中提供:
- 最好使用小写或混合大小写的变量名,以避免与许多具有特殊函数的全大写变量发生冲突:
localsites+=('foo')
- 确保为是否要解释变量选择了正确的引号:
localsites+=('foo') ; localsites+=("${newSite}")
- 你几乎永远不会想要
[*]
。请改用[@]
,并在其周围加上双引号:echo "${localsites[@]}"