Разделение списка в Bash
У меня есть этот скрипт:
#!/bin/bash
list="a b c d"
for item in ${list[@]}; do
echo "${item}"
done
Когда я запускаю его, это вывод:
a
b
c
d
Это именно то , что я хочу. Тем не мение, shellcheck
ненавидит это и выдает ошибку:
for item in ${list[@]}; do
^-- SC2068: Double quote array expansions to avoid re-splitting elements.
Но когда я заключаю двойную кавычку в переменную, вывод скрипта меняется на этот:
a b c d
Что не то, что я хочу.
Является ли шеллчек правильным, и я должен изменить способ извлечения элементов из переменной, но как? Или я должен просто сказать shellcheck
игнорировать это?
2 ответа
Это не массив:
list="a b c d"
Вы просто назначаете list
до строки длиной 7.
Чтобы сделать его реальным массивом:
list=(a b c d)
Затем с for item in "${list[@]}"
, вы получите правильный результат.
Для вашего обновленного вопроса, вы должны просто использовать $list
вместо ${list[@]}
, так как list
не массив
Я получал эту ошибку при использовании кода ниже:
redhatCatalogs=("certified-operators" "redhat-marketplace")
for catalog in ${redhatCatalogs[@]}; do
...
Обратите внимание, что мне не хватает кавычек, после добавления кавычек проблема была решена:
redhatCatalogs=("certified-operators" "redhat-marketplace")
for catalog in "${redhatCatalogs[@]}"; do
...
Итак, в заключение, рассмотрим и цитаты!:
"${redhatCatalogs[@]}"