Shell “为什么可以?”;破折号-c';:'&引用;从源代码生成破折号0.5.8时失败?

Shell “为什么可以?”;破折号-c';:'&引用;从源代码生成破折号0.5.8时失败?,shell,ubuntu,posix,dash-shell,Shell,Ubuntu,Posix,Dash Shell,使用从源代码(版本0.5.8,可在上获得)编译的破折号二进制文件,执行 dash -c ':' 失败于 dash: 1: :: Permission denied 这意味着 case foo in *bar*) : do_stuff ;; *) : ;; esac 失败,这会破坏很多脚本。为什么ubuntu分发的破折号二进制文件没有这个问题?如果LC\u ALL设置为排序规则顺序,这与ASCII字节顺序默认值(LC\u ALL=C)不同,mkbuiltins可以在builtin

使用从源代码(版本0.5.8,可在上获得)编译的破折号二进制文件,执行

dash -c ':'
失败于

dash: 1: :: Permission denied
这意味着

case foo in
*bar*) :
   do_stuff ;;
*) :
   ;;
esac

失败,这会破坏很多脚本。为什么ubuntu分发的破折号二进制文件没有这个问题?

如果
LC\u ALL
设置为排序规则顺序,这与ASCII字节顺序默认值(
LC\u ALL=C
)不同,
mkbuiltins
可以在
builtins.C
中生成一个数组,其中
bsearch()
可能无法找到内置文件


这肯定是一个bug,应该向上游报告。

CNR。运行我自己的构建,同一命令没有失败。
$~/local/opt/dash-0.5.8/bin/dash-c':&echo“null命令成功退出”
;仅输出:
null命令成功退出
我很好奇,顺便问一下——您是否从
true
中得到同样的失败?如果您阅读源代码,
true
的实现方式相同。嗯,true可以工作,:不可以。您在哪个操作系统上试用过它?我刚刚测试了true和:在OS X上工作,但是:在ubuntu 14.04上从源代码编译时不工作。中报告-感谢所有的帮助!