Учтите следующее:
$ 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))'
То, что я пытался сделать вне этого вопроса, на самом деле было «обратным» поведением. Посмотрите последний пример моего ответа здесь, чтобы увидеть, что именно я пытался сделать. Глупая идея, но тем не менее работает