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 1
y 0
cuáles serían shorthands para true
y 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.
0
está true
en la secuencia de comandos de shell y 1
es 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.
true
en shell. Sin embargo, en la expansión aritmética, los $((...))
estados de retorno se cambian: 1 es true
y 0 es false
para 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