Considérer ce qui suit:
$ 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
Fondamentalement, j'essayais de déclarer des fonctions 1et 0qui seraient des raccourcis pour trueet false, mais comme vous pouvez le voir, j'ai rencontré des problèmes avec l'utilisation de noms numériques dans les fonctions. Le même comportement se produit avec les alias et les noms à deux chiffres.
La question est "pourquoi"? Est-ce mandaté par POSIX? ou juste un caprice de coquilles bourne?
Voir aussi la question connexe à celle-ci.
0trouve truedans les scripts shell et 1est false(vraiment, tout non différent de zéro est traité comme faux), au cas où quiconque le lirait ne le sait pas. C'est à l'envers de la plupart des autres langages de programmation.
truedans le shell. Cependant, dans l'expansion arithmétique, les $((...))états de retour sont inversés - 1 est trueet 0 est falsepour la cohérence avec la syntaxe du langage C. Essayez par exemple bash -c 'echo $((1==1));echo $((1==2))' Ce que j'essayais de faire en dehors de cette question était en fait "d'inverser" le comportement. Voir le dernier exemple de ma réponse ici pour voir exactement ce que j'essayais de faire. Idée idiote, mais fonctionne néanmoins