加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – Bash / SH,Same命令输出不同?

发布时间:2020-12-14 02:22:15 所属栏目:Linux 来源:网络整理
导读:$cat a.sh#!/bin/bashecho -n "apple" | shasum -a 256$sh -x a.sh+ echo -n apple+ shasum -a 256d9d20ed0e313ce50526de6185500439af174bf56be623f1c5fe74fbb73b60972 -$bash -x a.sh+ echo -n apple+ shasum -a 2563a7bd3e2360a3d29eea436fcfb7e44c735d117
$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  -

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

解决方法

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

因此,当echo -n与sh一起运行时,它输出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标准的便携式打印到stdout的方法是使用printf utility:

printf %s "apple" | shasum -a 256

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读