这个Bash单线有什么问题?

时间:2013-10-29 15:34:43

标签: bash

如果你能指出我失败的地方,我会很高兴的:

line="some text"
printf "other text"|read line;printf '%s' "$line"

输出:

  

一些文字

我想到的输出:

  

其他文字

这是次要的事情还是我错过了重要的事情?

2 个答案:

答案 0 :(得分:5)

由于管道,$line变量在子shell中分配,而父shell不记录更改。您可以使用shopt -s lastpipe选项在当前shell

中执行管道的最后一个命令

在此示例中,您只打印字符串,您也可以使用以下语法:

read line <<< "other text"; printf '%s' "$line"

或者通常您可以使用流程替换

read line < <(printf "other text"); printf '%s' "$line"

答案 1 :(得分:2)

像这样使用:

read line < <(printf "other text") && printf '%s' "$line"