Я пытаюсь понять, как команда bash read
работает под капотом. Учитывая, что он ожидает, что его ввод будет поступать со стандартного ввода, я был удивлен, обнаружив, что ввод по конвейеру не работает должным образом. Например,
### Pipe scenario
echo "1 2 3" | read -r one two three
echo "one: $one, two: $two, three: $three"
# output: 'one: , two: , three:'
### Herestring scenario
read -r one two three <<< "1 2 3"
echo "one: $one, two: $two, three: $three"
# output: 'one: 1, two: 2, three: 3'
Может ли кто-нибудь объяснить, чем принципиально два вышеуказанных способа предоставления ввода отличаются друг от друга (с точки зрения команды чтения)?
EDIT в ответ на комментарии: Я не хочу знать, «как обойтись без ввода данных через труба », как и связанные вопросы в комментариях. Я знаю, как это сделать (например, я могу использовать здесь строку!).
Мой вопрос: каков основной механизм, который заставляет чтение вести себя по-разному в двух случаях?