Цикл For с записями в кавычках

Цикл for, который проходит через список цитируемых заголовков:

for h in "header" "header 2"; do
    echo $h
done

возвращает

header
header 2

Я хотел бы сослаться на заголовки где-нибудь еще, чтобы очистить это, например, присвоить их переменной.

headers='"header" "header 2"'
for h in $headers; do
    echo $h
done

, но это возвращает

"header"
"header
2"

, как и должно быть.

Есть ли способ обойти это? Это похоже на этот пост со списком файлов с пробелами, но я не делаю файлы, и я хотел бы сохранить их в одной строке, так как там будет много записей.

0
23.05.2017, 15:39
2 ответа

Другой способ сделать это - изменить переменную разделителя полей, например:

headers="header,header 2"
IFS=,
for h in $headers; do
        echo $h
done

Примечание: Если у вас есть другие циклы, требующие IFS по умолчанию value вы можете сначала сохранить значение IFS во временную переменную.

См. Также man bash и поиск по запросу IFS для получения дополнительной информации.

2
28.01.2020, 02:34

Я понял, что способ обойти это - использовать запятые (или что-то еще) вместо кавычек и перейти в стиле csv. Теперь это простое преобразование в разделитель строк.

headers="header,header 2"
headers=$(echo $headers | sed 's/,/\n/g')
printf "$headers\n" | while read h; do
    echo $h
done

Тем не менее, если у вас есть более элегантные решения, пожалуйста, поделитесь .

0
28.01.2020, 02:34

Теги

Похожие вопросы