2 votes

Evaluer la chaîne de caractères "$((expression))`` et l'enregistrer dans une variable

Cela va paraître assez bizarre pour certains d'entre vous. Supposons que j'ai une chaîne qui représente un $((expression)) expression arithmétique, expression mathématique comme '$((1+1))' . Je souhaite l'exécuter et livrer son résultat à une variable.

Exemple :

$ expression='$((5+5))'
$ echo $expression 
'$((5+5))'

$ # Expected result: 10

Comment puis-je évaluer cette chaîne et stocker son résultat ?

1voto

Arctic Kona Points 246

Si vous évaluez une chaîne de caractères, essayez eval .

str="$[ 5 + 5 ]"
eval "numb=$str"    # Turns into `numb=$[ 5 + 5 ]`
echo $numb    # Outputs 10

eval peut exécuter des chaînes de caractères comme s'il s'agissait de code Shell. Attention ! Si $str peut contenir des caractères spéciaux, cela peut casser votre script ou même créer une faille de sécurité.

0voto

Liso Points 14200

Il suffit de le stocker en variable comme vous le feriez normalement.

$ result=$((5+5))
$ echo $result 
10

Si ce n'est pas ce que vous vouliez dire, modifier votre poste et de poster des informations supplémentaires.

0voto

Stewart Points 1385

S'il s'agit en fait de mathématiques, et plus précisément s'il s'agit d'une simple arithmétique de nombres entiers, vous pouvez utiliser exactement le format que vous avez :

$ var=$((1+1))
$ echo "$var"
2

Il en va de même s'il s'agit d'une commande. Par exemple, des calculs un peu plus compliqués peuvent être effectués en passant par la commande bc :

## simple integer math works
$ echo $((3 * 2))
6
## fractions fail
$ echo $((1.3 * 2))
bash: 1.3 * 2: syntax error: invalid arithmetic operator (error token is ".3 * 2")
## bc works
$ echo "1.3 * 2" | bc
2.6

Donc, pour stocker cela dans une variable, il suffit d'utiliser la norme substitution de commande :

$ var=$(echo "1.3 * 2" | bc)
$ echo "$var"
2.6

Enfin, vous disposez également de la eval (voir help eval en bash ) :

$ help eval
eval: eval [arg ...]
    Execute arguments as a shell command.

    Combine ARGs into a single string, use the result as input to the shell,
    and execute the resulting commands.

    Exit Status:
    Returns exit status of command or success if command is null.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X