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 1
et 0
qui seraient des raccourcis pour true
et 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.
0
trouve true
dans les scripts shell et 1
est 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.
true
dans le shell. Cependant, dans l'expansion arithmétique, les $((...))
états de retour sont inversés - 1 est true
et 0 est false
pour 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