【问题标题】:Bash/SH, Same command different output?Bash/SH,相同的命令不同的输出?
【发布时间】:2017-05-01 19:00:57
【问题描述】:
$ cat a.sh
#!/bin/bash

echo -n "apple" | shasum -a 256

$ sh -x a.sh
+ echo -n apple
+ shasum -a 256
d9d20ed0e313ce50526de6185500439af174bf56be623f1c5fe74fbb73b60972  -
$ bash -x a.sh
+ echo -n apple
+ shasum -a 256
3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1b  -

最后一个是正确的。 这是为什么?以及如何解决?

【问题讨论】:

  • 作为参考,如果我也尝试cshzsh,我会得到最后一个。但是如果我从echo 中省略-n,我会得到所有4 个相同的结果。
  • 故事的寓意:如果命令的输出不同,请重新考虑您对其输入的假设。

标签: linux bash shell sh


【解决方案1】:

根据 POSIX,echo 不支持任何选项。

因此,当 echo -nsh 一起运行时,它会输出 literal -n 而不是将 -n 解释为 no-trailing-newline 选项:

$ sh -c 'echo -n "apple"'
-n apple                  # !! Note the -n at the beginning.

注意:并非所有 sh 实现都以这种方式运行;一些,例如在 Ubuntu 上(dash 充当 sh),确实支持 -n 选项,但关键是你不能依赖 ,如果您的代码必须在多个平台上运行。

便携 POSIX 兼容的打印到标准输出的方式是使用printf utility

printf %s "apple" | shasum -a 256

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-27
    • 2017-11-08
    • 2020-02-01
    • 2018-04-10
    • 2022-07-16
    • 2019-06-28
    • 2011-12-12
    • 1970-01-01
    相关资源
    最近更新 更多