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 1e 0quali sarebbero le scorciatoie per truee 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è truein 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.
truenella shell. Tuttavia, nell'espansione aritmetica gli $((...))stati di ritorno sono invertiti - 1 è truee 0 è falseper 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