Цикл 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"
, как и должно быть.
Есть ли способ обойти это? Это похоже на этот пост со списком файлов с пробелами, но я не делаю файлы, и я хотел бы сохранить их в одной строке, так как там будет много записей.
Другой способ сделать это - изменить переменную разделителя полей, например:
headers="header,header 2"
IFS=,
for h in $headers; do
echo $h
done
Примечание: Если у вас есть другие циклы, требующие IFS по умолчанию value вы можете сначала сохранить значение IFS во временную переменную.
См. Также man bash
и поиск по запросу IFS
для получения дополнительной информации.
Я понял, что способ обойти это - использовать запятые (или что-то еще) вместо кавычек и перейти в стиле csv. Теперь это простое преобразование в разделитель строк.
headers="header,header 2"
headers=$(echo $headers | sed 's/,/\n/g')
printf "$headers\n" | while read h; do
echo $h
done
Тем не менее, если у вас есть более элегантные решения, пожалуйста, поделитесь .