从标准输入中读取的两种不同方式

时间:2019-05-09 18:38:05

标签: bash shell pipe

很难用谷歌搜索这个,我有这个:

echo "age" |  while read line; do
    echo "$line"
done

但是有这种风格:

while read line; do
    echo "$line"
done < echo "age"

首先,第二种样式不太正确,但是第一种和第二种样式有名称吗?功能/行为上有区别吗?

1 个答案:

答案 0 :(得分:1)

最大的功能差异是,第一个(在bash中)将在子shell中运行循环。结果,$line将在循环完成后丢失其值。为了避免使用子shell,您可以使用heredoc将内容直接嵌入到shell中:

while read line; do
    echo "$line"
done << EOF
age
EOF