«+ =: Команда не найдена» при попытке добавить значение в массив - Shell Script - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь добавить пути к папкам в массив. Я посмотрел на inte rnet и увидел это решение. Я попробовал, но получаю сообщение об ошибке.

Мой код:

LOCALSITES=()

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

echo "${LOCALSITES[*]}"

Сообщение об ошибке:

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

1 Ответ

0 голосов
/ 23 марта 2020
${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')

Другие вещи, которые вы можете захотите рассмотреть, любезно предоставленный Гордоном Дэвиссоном в комментарии:

  • Вероятно, лучше использовать имена переменных в нижнем или смешанном регистре, чтобы избежать конфликтует со многими переменными all-caps со специальными функциями: localsites+=('foo').
  • Убедитесь, что вы выбрали правильные кавычки для того, чтобы sh интерпретировать переменные или нет: localsites+=('foo') ; localsites+=("${newSite}").
  • Вы почти никогда не хотите [*]. Вместо этого используйте [@] и заключите в него двойные кавычки: echo "${localsites[@]}".
...