1

如果您能指出我在这里失败的地方,我会很高兴:

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

输出:

一些文字

我想到的输出:

其他文字

这是一个 subshel​​l 的东西还是我错过了一些重要的东西?

4

2 回答 2

5

因为管道,$line变量是在子shell中赋值的,父shell不记录变化。您可以使用该shopt -s lastpipe选项在当前shell中执行管道的最后一条命令

在这个例子中,你只打印一个字符串,你也可以使用这个语法:

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

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

read line < <(printf "other text"); printf '%s' "$line"
于 2013-10-29T15:36:56.240 回答
2

像这样使用它:

read line < <(printf "other text") && printf '%s' "$line"
于 2013-10-29T15:38:23.417 回答