По сути, я пытаюсь выделить определенные части вывода команды оболочки для нескольких переменных, но я не знаю, как это сделать.
Для простоты предположим, что команда на оболочке при выполнении печатает
one two three four
который может быть смоделирован с
echo "one two three four"
(хотя фактическая команда отличается)
Теперь я хотел бы назначить второе и четвертое слово вывода (в данном случае два и четыре ) переменным w1 и w2 .
Я думал, что мог бы использовать команду чтения так:
echo "one two three four" | awk '{print $2 " " $4}' | read w1 w2
но это не работает, вероятно, потому что команда чтения выполняется в подпроцессе.
Итак, как мне достичь того, чего я хочу?
Ответы:
Это не работает, потому что
read
запускается в дочернем процессе, который не может повлиять на среду родителя.У вас есть несколько вариантов:
Вы можете преобразовать вашу команду в:
Или измените IFS и используйте
set
:или здесь строка:
источник
<<< Here String
read -r
:do not allow backslashes to escape any characters