我是Bash的新手,我正在尝试学习如何使用|来首先执行两个命令符号,其次是如何将两个命令连接到复合命令中。
当在一行中写入两个命令时,管道符号|用于将第一个命令的输出连接到第二个命令的输入。所以我不太明白它是如何加入“嘿”和“,你好吗?”。
echo "hey" | echo ", how are you?"
编写复合命令时,命令应位于以分号分隔的左括号和右括号之间。在这种情况下
{ echo "Hey"; echo ", how are you" }
,但它似乎没有按预期工作。
对于这两种情况,我可以在这里错过什么?
答案 0 :(得分:5)
简短版本:使用printf
代替echo
。
echo
不读取其标准输入,因此管道实际上与
echo "hey"; echo ", how are you?"
这是两个单独的命令,每个命令在最后一个参数之后打印一个隐式换行符。
您的大括号命令失败,因为在最后一个命令后需要使用分号或换行符:{ echo "Hey"; echo ", how are you"; }
。
但问题的答案是,您需要取消echo
打印的换行符。
echo -n "hey"; echo ", how are you?"
这适用于bash
,但不适用于所有shell,因为-n
选项是非标准的。 printf
更可靠:
printf "hey"; printf ", how are you?\n"