Разделение списка в 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[@]}"

Другие вопросы по тегам