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 1
i 0
co byłoby dla shorthands true
a 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.
0
jest true
w skryptach powłoki i 1
jest 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.
true
w powłoce. Jednak w interpretacji arytmetycznej $((...))
odwracane są statusy powrotu - 1 oznacza, true
a 0 oznacza false
spó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