Considera quanto segue:
$ 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
Fondamentalmente, stavo cercando di dichiarare le funzioni 1
e 0
quali sarebbero le scorciatoie per true
e false
, ma come puoi vedere ho riscontrato problemi con l'uso di nomi numerici nelle funzioni. Lo stesso comportamento si verifica con alias e nomi a due cifre.
La domanda è "perché"? È obbligatorio per POSIX? o solo una stranezza di conchiglie simili a bourne?
Vedi anche la domanda correlata a questo.
0
è true
in shell scripting ed 1
è false
(in realtà, qualsiasi diverso da zero viene trattato come falso), nel caso in cui chiunque legga questo non sia a conoscenza. Ciò è arretrato rispetto alla maggior parte degli altri linguaggi di programmazione.
true
nella shell. Tuttavia, nell'espansione aritmetica gli $((...))
stati di ritorno sono invertiti - 1 è true
e 0 è false
per coerenza con la sintassi del linguaggio C. Prova ad esempio bash -c 'echo $((1==1));echo $((1==2))'
Quello che stavo cercando di fare al di fuori di questa domanda era in realtà "invertire" il comportamento. Vedi l'ultimo esempio sulla mia risposta qui per vedere cosa stavo esattamente cercando di fare. Idea sciocca, ma funziona comunque