尝试向数组添加值时"+=:找不到命令" - Shell 脚本



我正在尝试向数组添加文件夹路径。我在网上查了一下,看到了这个解决方案。我试了一下,但收到了一条错误消息。

我的代码:

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[@]}"

相关内容

  • 没有找到相关文章