Parfois, je dois diviser un nombre par un autre. Ce serait formidable si je pouvais juste définir une fonction bash pour cela. Jusqu'à présent, je suis obligé d'utiliser des expressions telles que
echo 'scale=25;65320/670' | bc
mais ce serait bien si je pouvais définir une fonction .bashrc qui ressemblait à
divide () {
bc -d $1 / $2
}
command-line
function
arithmetic
bashrc
bc
ixtmixilix
la source
la source
ksh
, la variante 93, supporte les chaînes ici.Bash peut faire le calcul lui-même dans une certaine mesure. Ce n'est pas utile pour la précision, cependant, car il arrondit.
Mais vous avez tout à fait raison: une fonction bash serait un simple raccourci et votre exemple fonctionne en principe.
Jetez cela dans votre .bashrc et ensuite vous pourrez:
la source
echo $((10 / 5))
n'a besoin d'aucune citation.echo $((6383/7671))
vous donnera zéro. Vous devez être explicite sur les nombres en virgule flottante:echo $((6383.0/7671.0))
Vous connaissez probablement le bash construit 'expr' comme dans
qui est limité à des entiers et nécessite les espaces entre les arguments.
Qu'est-ce qui vous empêche de définir une fonction dans le sens de l'expression d'écho que vous utilisez déjà? C'est à dire
la source
Pas vraiment une réponse à cette question précise, mais ça pourrait être bon à savoir. Utilisez
zsh
;-)la source
expr
intégré de bash , donc bonne réponse quand même :)Si vous avez
calc
installé sur votre système et que vous n'aimez pas l'arrondi, vous pouvez:la source
apcalc
(Précision arbitraire) ... Le binaire s'appellecalc
calc
.Un bidouillage sale pour les petites valeurs et une précision limitée sans utiliser bc serait de multiplier le nominateur avant la division pour obtenir un résultat précis.
Exemple sans précision:
et avec une précision de 2 chiffres: multipliez par 100 et déplacez le point décimal de 2 pas à gauche:
Ceci n'est utile que si la plage de nombres est connue auparavant et que la précision est toujours la même. Éviter d'appeler bc , et appeler sed ne semble pas très raisonnable.
Notez que la multiplication des valeurs peut entraîner des erreurs de débordement, mais pas très tôt:
la source
$[expression]
placeThe old format $[expression] is deprecated and will be removed in upcoming versions of bash.
Au lieu d'utiliser bc, vous pouvez utiliser awk:
la source
la source