27 votes

Comment assigner une sortie à une variable shellscript ?

Comment assigner ce résultat à une variable shell ?

Entrée :

echo '1+1' | bc -l

Sortie :

2

Tentatives :

(n'a pas fonctionné)

#!bin/sh
a=echo '1+1' | bc -l
echo $a

53voto

shellter Points 15304

Vous recherchez la fonctionnalité de l'interpréteur de commandes appelée substitution de commandes.

Il existe 2 formes de substitution de cmd

  1. Original, retour à l'âge de pierre, mais complètement portable et disponible dans tous les shells de type Unix (enfin presque tous).

    Vous enfermez vos commandes de génération de valeur à l'intérieur des caractères back-ticks, c'est-à-dire

    $ a=`echo 1+1 | bc -l`
    $ echo $a
    2
    $
  2. Substitution de cmd moderne, moins encombrante et facilement emboîtable, fournie avec $( cmd ) , c'est-à-dire

    $ a=$(echo 1+1 |  bc -l)
    $ echo $a
    2
    $

Votre ligne "she-bang" dit, #!/bin/sh Si vous travaillez sur une véritable plate-forme Unix, il est donc probable que votre système d'exploitation /bin/sh est l'interpréteur de commandes Bourne original, et vous devrez utiliser l'option 1 ci-dessus.

Si vous essayez l'option 2 tout en continuant à utiliser #!/bin/sh et que cela fonctionne, alors vous avez un shell moderne. Essayez de taper echo ${.sh.version} o /bin/sh -c --version et voyez si vous obtenez des informations utiles. Si vous obtenez un numéro de version, vous voudrez en savoir plus sur les fonctionnalités supplémentaires des nouveaux shells.

En parlant de nouvelles fonctionnalités, si vous utilisez vraiment bash, zsh, ksh93+, vous pouvez réécrire votre code d'exemple comme suit

a=$(( 1+1 ))

Ou si vous faites plus d'opérations mathématiques, qui resteraient toutes à l'intérieur de la portée, vous pouvez utiliser l'arithmétique du shell comme :

(( b=1+1 ))
echo $b
2

Dans les deux cas, vous pouvez éviter la création de processus supplémentaires, mais vous ne pouvez pas faire d'arithmétique en virgule flottante dans le shell (alors que vous pouvez le faire avec bc ).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X