管道中$的正确值是多少?

威廉·珀塞尔

我有点不高兴地发现以下行为:

bash$ false
bash$ true | echo $?
0
bash$ ksh
ksh$ false
ksh$ true | echo $?
0
ksh$ zsh
zsh$ false
zsh$ true | echo $?
1

直观地看,zsh正确,而bash和ksh错误。$?是“最近执行的管道的退出状态”,在每种情况下都应为1。请注意,false | echo $?ksh也都输出0 bash是标准的灵活的在这一点上(即行为是不确定的),或者是bashksh不符合要求的吗?我也很好奇知道bash和ksh在做什么以解决这个问题。

$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin11)
Copyright (C) 2007 Free Software Foundation, Inc.
$ zsh --version
zsh 4.3.11 (i386-apple-darwin11.0)
$ ksh --version
  version         sh (AT&T Research) 1993-12-28 s+
hek2mgl

POSIX说:

$?扩展到最新的[command或]管道的小数退出状态...

请注意@lurker的评论当前版本中的Bash4.3.11行为与相同zsh

在发生什么bash以及zsh$?将被命令设置之前,管道和管内得到没有改变。这就是为什么预期结果是false->的返回值的原因1这就是POSIX指定的内容。

我找不到任何描述ksh行为的文档我只能假设在执行管道之前进行ksh重置$?,因为以下代码有效:

#!/bin/ksh
false
ret=$?
true | echo "$ret"

可能应该将其记录为错误ksh但是,我不确定POSIX是否完全指定了此行为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

核矩阵的值是多少?

来自分类Dev

执行每条指令后,EAX中的值是多少?

来自分类Dev

黑色的CieLuv值是多少?

来自分类Dev

将sched_setaffinity的最大CPU数作为基准的正确值是多少?

来自分类Dev

avro Idl中的联合的默认值是多少?

来自分类Dev

UITableViewCellSelectionStyleGray的RGB值是多少?

来自分类Dev

Android中WebView的默认比例值是多少?

来自分类Dev

在不同的iOS版本中Int的最大值是多少?

来自分类Dev

不确定a的值是多少

来自分类Dev

uWSGI中的默认套接字时间值是多少

来自分类Dev

Assembly中系统调用的返回值是多少?

来自分类Dev

溢出的变量的值是多少?

来自分类Dev

核矩阵的值是多少?

来自分类Dev

c中char的默认值是多少

来自分类Dev

MySQL中的默认Enum值大小是多少

来自分类Dev

$ {#1}的值是多少?

来自分类Dev

limits.conf中的priority的最大值是多少?

来自分类Dev

该值的单位是多少

来自分类Dev

UIApplicationBackgroundFetchIntervalMinimum的实际值是多少?

来自分类Dev

Android中WebView的默认比例值是多少?

来自分类Dev

虚拟机中USB设备的正确值是多少

来自分类Dev

$ {variable%rc *}的值是多少?

来自分类Dev

XmlGregorianCalender中的默认毫秒值是多少?

来自分类Dev

枚举的值是多少?

来自分类Dev

这个函数中char的值是多少?

来自分类Dev

a、b、c 的值是多少?

来自分类Dev

Scheme中`(begin)`的返回值是多少?

来自分类Dev

如果未在管道活动中明确指定,则默认频率是多少

来自分类Dev

Nemo 的正确 PPA 是多少?