Sat*_*ato 8 linux bash shell sh
$ 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 -
Run Code Online (Sandbox Code Playgroud)
最后一个是正确的.这是为什么?以及如何解决?
mkl*_*nt0 12
每个POSIX,不echo支持任何选项.
因此,当echo -n运行时sh,它输出文字 -n而不是解释-n为no-trailing-newline选项:
$ sh -c 'echo -n "apple"'
-n apple # !! Note the -n at the beginning.
Run Code Online (Sandbox Code Playgroud)
注意:并非所有 sh实现都以这种方式运行; 一些,例如在Ubuntu(其中dash充当sh),确实支持该-n选项,但关键是如果您的代码必须在多个平台上运行,则不能依赖它.
符合POSIX标准的便携式打印到stdout的方法是使用printf实用程序:
printf %s "apple" | shasum -a 256
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |