Чтобы рассматривать запятую как разделитель слов, попробуйте:
IFS="$IFS," read a b c d
Это временно добавляет запятую в IFS
, который представляет собой список символов, которые оболочка использует для разделителей полей.
В качестве примера давайте соберем некоторые данные:
$ IFS="$IFS," read a b c d
1, 2,3 , 4
Давайте посмотрим, как bash интерпретировал этот ввод:
$ echo "a=$a b=$b c=$c d=$d"
a=1 b=2 c=3 d=4
улучшение
Мы можем объединить приглашение и команду чтения:
IFS="$IFS," read -p "Enter network info: " a b c d
Документация
От man bash
:
IFS
Разделитель внутренних полей, который используется для разделения слов после раскрытия и разделения строк на слова с помощью встроенной команды read. Значением по умолчанию является <space><tab><newline>
альтернатива
Если по какой-то неуказанной причине кто-то действительно хотел использовать sed
для этой задачи:
read -p "Enter network info: " a b c d < <(sed 's/,/ /g; q')
Команда s/,/ /g
говорит sed заменить каждую запятую на пробел. q
говорит ему выйти после первой строки.
Одиночный <
указывает на перенаправление: он сообщает оболочке получить свой ввод для команды read
из файлового объекта, который следует в командной строке.
Конструкция <(...)
называется подстановкой процесса и создает файлоподобный объект из команды, содержащейся в скобках. Эта команда - команда sed
которая заменяет запятые пробелами.
Для того же подхода, но с использованием awk:
read -p "Enter network info: " a b c d < <(awk '{gsub(/,/, " "); print; exit}')