![从 echo 重定向输出时如何避免这种意外行为?](https://linux22.com/image/144885/%E4%BB%8E%20echo%20%E9%87%8D%E5%AE%9A%E5%90%91%E8%BE%93%E5%87%BA%E6%97%B6%E5%A6%82%E4%BD%95%E9%81%BF%E5%85%8D%E8%BF%99%E7%A7%8D%E6%84%8F%E5%A4%96%E8%A1%8C%E4%B8%BA%EF%BC%9F.png)
我想使用一行命令轻松添加到我的主机文件中,但我得到了意想不到的结果。
$ sudo sh -c 'echo -e "10.0.10.0\tserver.bananas.com\tserver" >> /etc/hosts'
$ cat /etc/hosts
-e 10.0.10.0 server.bananas.com server
我在 echo 上使用 -e 开关来启用选项卡的反斜杠转义,但 -e 包含在重定向的输出中。
我怎样才能避免这种情况?
答案1
我不太确定为什么 echo 根据您的问题失败,但一般来说,我会使用它printf
。它的输出更加可预测。
printf '%s\t%s\t%s\n' '10.0.10.0' 'server.bananas.com' 'server'
解释
%s\t%s\t%s\n
:这部分解释了输出格式,即字符串、制表符、字符串、制表符、字符串、换行符。- 这三个字符串是提供给 的以下参数
printf
。
写入 root 拥有的文件
另外,我不确定您是否知道,但sudo sh -c
您可以不使用该构造,sudo tee
而是使用。 IE
printf … | sudo tee -a /etc/hosts
我发现这更方便,特别是当它避免必须转义外部'
.