Как отформатировать две строки, разделенные пробелом в переменной, чтобы они рассматривались как одна строка? - PullRequest
0 голосов
/ 10 октября 2019

У меня есть одна переменная, содержимое которой выглядит следующим образом:

echo $var1
"string1 string2" "string3 string4" "string5 string6"

Я хотел бы, чтобы "string1 string2" и т. Д. Были бы видны как одна строка, в настоящее время, если я печатаю первое поле с помощью awk, я получаю'' word1 'как первое поле, второе поле -' word2 '' и т. д.

Когда я использую эту переменную в цикле for, она не работает, потому что цикл for не видит строки под кавычкамикак одна строка.

Например, я попытался:

for i in "${var1[@]}";do command to run program with arguments "$i";done
  • это не работает, потому что программа запускается с аргументом "" строка1, в то время как она должна запускаться с ""строка1 строка2 "аргумент.

Кроме того, хотя я создаю другую переменную $ var2, например:

var2=("string1 string2" "string3 string4")

, и запускаю ее в цикле выше, она работает.

Мой вопрос: есть ли способ отформатировать $ var1 в приведенных выше примерах, чтобы он выглядел как $ var2, чтобы он работал? Спасибо.

Примечание: $ var1 - это результат программы, которая выбираетназвания услуг.

1 Ответ

0 голосов
/ 11 октября 2019

Если вы хотите получить результирующие строки с кавычками, используйте

echo "$var1" | grep -Eo '"[^"]*"' | while IFS= read -r line; do
   echo "l=$line"
done

Результат:

l="string1 string2"
l="string3 string4"
l="string5 string6"

Без кавычек:

echo "$var1" | grep -Eo '"[^"]*"' | while IFS='"' read -r x line x ; do
   echo "l=$line"
done

Результат:

l=string1 string2
l=string3 string4
l=string5 string6
...