Considera lo siguiente:
$ 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
Básicamente, estaba tratando de declarar funciones 1y 0cuáles serían shorthands para truey false, pero como puede ver, tuve problemas con el uso de nombres numéricos en las funciones. El mismo comportamiento ocurre con alias y nombres de dos dígitos.
La pregunta es "¿por qué"? ¿Es obligatorio por POSIX? o simplemente un capricho de conchas de bourne?
Ver también la pregunta relacionada con este.
0está trueen la secuencia de comandos de shell y 1es false(realmente, cualquier no distinto de cero se trata como falso), en caso de que alguien que lea esto no lo sepa. Esto es al revés de la mayoría de los otros lenguajes de programación.
trueen shell. Sin embargo, en la expansión aritmética, los $((...))estados de retorno se cambian: 1 es truey 0 es falsepara mantener la coherencia con la sintaxis del lenguaje C. Intente, por ejemplo, bash -c 'echo $((1==1));echo $((1==2))' lo que estaba tratando de hacer fuera de esta pregunta era en realidad "revertir" el comportamiento. Vea el último ejemplo de mi respuesta aquí para ver exactamente qué estaba tratando de hacer. Idea tonta, pero no obstante funciona