У меня есть этот скрипт:Как заставить команду чтения правильно разобрать аргументы массива в кавычках?
#!/usr/bin/env bash
read -p "Provide arguments: " -a arr <<< "foo \"bar baz\" buz"
for i in ${arr[@]}
do
echo $i
done
который неправильно выводит:
foo
"bar
baz"
buz
Как я могу сделать это интерпретировать пользовательский ввод, так что параметры в кавычки бы один элемент массива? Как это:
foo
bar baz
buz
EDIT: Чтобы было ясно: я не хочу пользователю вводить каждый элемент в отдельной строке, так read
-ную в цикле не то, что я ищу.
Я думал делать 'IFS = ""; read -p "Предоставить аргументы:" -a arr <<< "$ var" 'и иметь новую строку между каждым элементом, но она не работает на меня. – fedorqui
Если вы используете _reading_ вход от STDIN, единственная опция, похоже, вводится с использованием разделителя, например. 'foo; bar baz; buz'. – devnull
Хорошо, но как? 'Предоставить аргументы: foo; бар-баз; buz' тоже не работает. Он читает 'foo;' (с двоеточием) как один элемент. 'GNU bash, версия 4.2.25 (1) -release (x86_64-pc-linux-gnu)'. –