Bash:你怎么回应"嘿"和",你好吗?" 有两个独立的echo命令?

Mar*_*ush 0 linux bash shell terminal ubuntu

我是Bash的新手,我正在尝试学习如何使用|来首先执行两个命令 符号,其次是如何将两个命令连接到复合命令中.

在一行中写入两个命令时,管道符号| 用于将第一个命令的输出连接到第二个命令的输入.所以我不太明白它是如何加入"嘿"和",你好吗?".

    echo "hey" | echo ", how are you?" 
Run Code Online (Sandbox Code Playgroud)

编写复合命令时,命令应位于以分号分隔的左括号和右括号之间.在这种情况下

    { echo "Hey"; echo ", how are you" }
Run Code Online (Sandbox Code Playgroud)

,但它似乎没有按预期工作.

对于这两种情况,我可以在这里错过什么?

che*_*ner 5

简短版本:使用printf而不是echo.


echo 不读取其标准输入,因此管道实际上是相同的

echo "hey"; echo ", how are you?"
Run Code Online (Sandbox Code Playgroud)

这是两个单独的命令,每个命令在最后一个参数后打印一个隐式换行符.

您的大括号命令失败,因为在最后一个命令后需要分号或换行符:{ echo "Hey"; echo ", how are you"; }.

但是,您的问题的答案是您需要禁止echo打印的换行符.

echo -n "hey"; echo ", how are you?"
Run Code Online (Sandbox Code Playgroud)

这适用于bash但不是所有shell,因为该-n选项是非标准的.printf更可靠:

printf "hey"; printf ", how are you?\n"
Run Code Online (Sandbox Code Playgroud)