2

我试图了解 bashread命令如何在幕后工作。鉴于它期望其输入来自标准输入,我惊讶地发现管道输入没有按预期工作。例如

### 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'

有人能解释一下上述两种提供输入的方式有什么不同吗(从读取命令的角度来看)?



编辑回应评论:

我不想知道“如何通过管道传递输入”,比如评论中的链接问题。我知道该怎么做(例如,我可以使用字符串!)。

我的问题是,在这两种情况下,使 read 行为不同的潜在机制是什么?

4

1 回答 1

2

可行read,但您需要在同一个子shell中询问值:

echo "1 2 3" | (read -r one two three && echo "one: $one, two: $two, three: $three")

另一种选择是

read -r one two three < <( echo "1 2 3")
于 2020-05-06T09:32:34.393 回答