Je veux comparer deux nombres avec bc
. Par cela réponse très bien cotée sur StackOverflow , je peux le faire d'une manière telle:
printf '%s\n' '1.2 > 0.4' | bc
bc
envoie 1
à STDOUT, indiquant que la déclaration est vraie (elle aurait renvoyé 0 si la déclaration était fausse).
Contrairement à tous les autres opérateurs, les opérateurs relationnels ('<', '>', "<=", "> =", "==", "! =") Ne doivent être valides que comme objet d'un if, tandis que, ou à l'intérieur d'une instruction for.
Je me trompe peut-être, mais ce langage semble interdire la syntaxe utilisée dans l'exemple ci-dessus.
L'utilisation autonome d'opérateurs relationnels dans bc
est-elle une violation de POSIX? Si oui, comment dois-je réécrire mon exemple?
Je me trompe peut-être, mais ce langage semble interdire la syntaxe utilisée dans l'exemple ci-dessus.
Cet exemple suppose que GNU bc, qui ajoute ses propres extensions au langage bc. Comme indiqué dans son manuel , vous devez utiliser le -s
commutateur pour lui faire traiter le langage bc POSIX exact, ou le -w
changez si vous voulez qu'il vous avertisse des extensions:
$ echo '1.2 > 0.4' | bc -s
(standard_in) 2: Error: comparison in expression
$ echo '1.2 > 0.4' | bc -w
(standard_in) 2: (Warning) comparison in expression
1
$ echo '1.2 > 0.4' | bc
1
Si oui, comment dois-je réécrire mon exemple?
$ printf 'if(%s > %s){a=1};a\n' 1.2 0.4 | bc -s
1
merci @icarus pour la version plus courte et plus facile pour les yeux.