Rozważ następujące:
$ 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
Zasadniczo, starałem się deklarować funkcje 1i 0co byłoby dla shorthands truea false, ale jak widać wpadłem na problem z użyciem nazwy numeryczne funkcje. To samo zachowanie występuje w przypadku aliasów i dwucyfrowych nazw.
Pytanie brzmi „dlaczego”? Czy jest to wymagane przez POSIX? czy po prostu dziwactwo muszli przypominających bourne?
Zobacz także powiązane pytanie z tym.
0jest truew skryptach powłoki i 1jest false(tak naprawdę każdy niezerowy traktowany jest jako fałsz), na wypadek, gdyby ktoś czytający to nie był świadomy. Jest to odwrotnie niż w przypadku większości innych języków programowania.
truew powłoce. Jednak w interpretacji arytmetycznej $((...))odwracane są statusy powrotu - 1 oznacza, truea 0 oznacza falsespójność ze składnią języka C. Spróbuj na przykład bash -c 'echo $((1==1));echo $((1==2))' To, co próbowałem zrobić poza tym pytaniem, było w rzeczywistości „odwróceniem” zachowania. Zobacz ostatni przykład mojej odpowiedzi tutaj, aby zobaczyć, co dokładnie próbowałem zrobić. Głupi pomysł, ale mimo to działa