99 % загрузки процессора «ps»

Проблема не в самом read, а в трубе. В bash это заставляет вторую команду (read, в данном случае ), выполняться в подоболочке. Так что на самом деле он readпревратится в переменную line, только эта переменная существует в подоболочке и исчезнет, ​​как только конвейер завершится.

(Обратите внимание, что другие оболочки ведут себя по-разному, в частности, ksh запустит последнюю команду конвейера в текущей оболочке, поэтому этот фрагмент кода может работать в ksh. В bash это не сработает, как видите.)

Возможным решением является использование замены процесса <(...)для первой части конвейера с дополнительным <для перенаправления на стандартный ввод:

read line < <(printf "%s" "a   b")

В данном конкретном случае можно было обойтись без команды printf, тогда <<<тоже работало бы:

read line <<<"a   b"
0
23.02.2021, 09:52
0 ответов

Теги

Похожие вопросы