首页 > 解决方案 > 尝试向数组添加值时出现“+=:找不到命令”-Shell 脚本

问题描述

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

我的代码:

LOCALSITES=()

for d in "$DIRLOC"/*; do
    ${LOCALSITES}+='foo'  #doesnt work
done

echo "${LOCALSITES[*]}"

错误信息:

showSites.sh: line 35: +=: command not found

标签: arraysbashshellsh

解决方案


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

推荐阅读