考虑以下:
$ ksh -c '1(){ echo hi;};1'
ksh: 1: invalid function name
$ dash -c '1(){ echo hi;};1'
dash: 1: Syntax error: Bad function name
$ bash -c '1(){ echo hi;};1'
bash: `1': not a valid identifier
bash: 1: command not found
$ mksh -c '1(){ echo hi;};1'
hi
基本上,我试图声明函数1
,0
这将是true
和的简写false
,但是如您所见,我在函数中使用数字名称时遇到了问题。别名和两位数名称也会发生相同的行为。
问题是“为什么”?它是POSIX授权的吗?或只是一个类似本恩的贝壳怪癖?
0
是true
在shell脚本中编写1
的false
(实际上,任何非零值都将被视为false),以防万一有人读到它。这与大多数其他编程语言相反。
true
在shell中。但是,在算术扩展中,$((...))
返回状态被翻转-1为true
,0 false
为与C语言语法一致。例如bash -c 'echo $((1==1));echo $((1==2))'
,尝试在此问题之外进行的操作实际上是“逆转”该行为。看到最后例如在我的答案在这里,看看究竟是什么,我试图做的。愚蠢的想法,但仍然有效