Разделение списка в Bash - PullRequest
       133

Разделение списка в Bash

0 голосов
/ 25 декабря 2018

У меня есть этот скрипт:

#!/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 игнорировать это?

1 Ответ

0 голосов
/ 25 декабря 2018

Это не массив:

list="a b c d"

Вы просто присваиваете list строке длины 7.

Чтобы сделать ее реальным массивом:

list=(a b c d)

Тогда с for item in "${list[@]}" вы получите правильный результат.


Для вашего обновленного вопроса вы должны просто использовать $list вместо ${list[@]}, потому что list isn 't массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...