每当运行子 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
的,因此只有o
oftwo
可见。
您可能必须清理 的内容two
才能达到所需的结果。
例如:
echo "one $(tr -d '\r' < two) three"
答案2
在这里一切都运行得很好:
$ echo -n two > two
$ echo "one $(cat two) three"
one two three
的输出是什么ls -l two
?