J'écris un script et je voudrais passer les résultats de bc
dans une variable. J'ai déclaré 2 variables ( var1
et var2
) et leur ai donné des valeurs. Dans mon script, je veux passer les résultats de bc
dans une autre variable dire var3
afin que je puisse travailler avec var3
pour d'autres calculs. Jusqu'à présent, j'ai pu écrire le résultat dans un fichier qui n'est pas ce que je recherche et j'ai également pu faire écho du résultat dans le terminal, mais je veux simplement passer le résultat à une variable à l'instant pour que Je peux travailler avec cette variable.
echo "scale=2;$var1/var2" | bc
la source
|
la commande à droite du canal est exécutée dans un sous-shell, et cela prend des ressources pour ouvrir un nouveau sous-shell (c'est comme ouvrir une nouvelle instance de bash pour exécuter cette commande). Si vous pouvez l'éviter, évitez-le. Ici, canaliser unecho
tobc
exécutera la commandebc
dans un sous-shell et est, dans un certain sens, retardé (aucune infraction), car bash a la merveilleuse construction here-string<<<
pour éviter des choses stupides comme celles-ci./bin/sh
(tiret) au lieu de bash, mais ce n'est pas le cas pour dash<<<
.time for i in {1..10000}; do : <<< ""; done
avectime for i in {1..10000}; do echo "" | : ; done
, vous verrez une différence dramatique. Alors vous avez raison, un hérédoc est légèrement plus rapide qu'un héritage. Mais il est plus gênant de taper sur une ligne.La substitution de commandes stocke la sortie d'une commande dans une variable.
la source