包含子进程的 echo 会生成意外的输出

包含子进程的 echo 会生成意外的输出

每当运行子 shell 命令作为echo命令的一部分时,我注意到输出会生成一些奇怪的结果。虽然我完全确定这只是我对 Unix shell 的工作原理缺乏了解,但我真的很感激一些关于幕后发生的事情的解释以及处理这个用例的适当方法是什么?

$ cat two
two

$ echo "one $(cat two) three"
threeo

我期望one two three作为输出

更新

对上面的错误示例表示歉意,因为该文件two之前是使用curl -I.为了保持上下文一致,下面是一个更合适的示例。

$ curl -sI https://google.com | grep server | cut -d " " -f 2
gws

$ echo "one $(curl -sI https://google.com | grep server | cut -d " " -f 2) three"
threes

如上所述,预期结果将是one gws three

答案1

文件two中可能有一个回车符。

您看到的输出似乎是one two重叠three的,因此只有ooftwo可见。

您可能必须清理 的内容two才能达到所需的结果。

例如:

echo "one $(tr -d '\r' < two) three"

答案2

在这里一切都运行得很好:

$ echo -n two > two
$ echo "one $(cat two) three"
one two three

的输出是什么ls -l two

相关内容