Розглянемо наступне:
$ 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
В принципі, я намагався оголосити функції 1
і 0
які були б скорочення для true
і false
, але , як ви можете бачити , що я зіткнувся з проблемою за допомогою цифрових імен функцій. Така ж поведінка трапляється з псевдонімами та двозначними іменами.
Питання "чому"? Це дозволено POSIX? чи просто вигадка з бурноподібних снарядів?
Дивіться також пов'язане з цим питання .
0
це true
сценарій оболонки і 1
є false
(насправді, будь-який ненульовий трактується як помилковий), якщо хтось, хто читає це, не знає. Це відстає від більшості інших мов програмування.
true
в оболонці. Однак в арифметичному розширенні $((...))
статуси повернення перевернуті - 1 є, true
а 0 - false
для узгодження з синтаксисом мови С. Спробуйте, наприклад, bash -c 'echo $((1==1));echo $((1==2))'
те, що я намагався зробити поза цим питанням, насправді був "зворотним" поведінкою. Дивіться останній приклад моєї відповіді тут, щоб побачити, що саме я намагався зробити. Дурна думка, але тим не менш працює