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