Considere o seguinte:
$ 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
Basicamente, eu estava tentando declarar funções 1
e 0
quais seriam atalhos para true
e false
, mas como você pode ver, tive um problema ao usar nomes numéricos em funções. O mesmo comportamento ocorre com aliases e nomes de dois dígitos.
A pergunta é "por que"? É mandatado pelo POSIX? ou apenas uma peculiaridade de conchas tipo bourne?
Veja também a pergunta relacionada a este.
0
está true
no script de shell e 1
é false
(realmente, qualquer diferente de zero é tratado como falso), caso alguém que esteja lendo isso não saiba. Isso é inverso da maioria das outras linguagens de programação.
true
no shell. No entanto, na expansão aritmética, os $((...))
status de retorno são invertidos - 1 é true
e 0 é false
consistente com a sintaxe da linguagem C. Tente, por exemplo, o bash -c 'echo $((1==1));echo $((1==2))'
que eu estava tentando fazer fora desta questão era, na verdade, "reverter" o comportamento. Veja o último exemplo da minha resposta aqui para ver o que exatamente eu estava tentando fazer. Parva ideia, mas mesmo assim funciona