2017-09-20 6 views
2

J'utilise bash pour écrire un script pour FSL, un logiciel d'imagerie. C'est tout au long de la ligne de commande, donc c'est facile à écrire.Opérateurs Bash: Quadrature d'une variable précédemment calculée, puis stockage dans une nouvelle variable

Je me bats pour pouvoir carré ma variable calculée précédemment, puis l'enregistrer comme nouvelle variable:

varStdBase=$(fslstats ${varBase%.nii.gz}_MAX100.nii.gz -S) 
echo "Std Dev. is: "$varStdBase 

varS1=$(echo '$varStdBase^2'|bc) 
echo "variance is: "$varS1 

Il devient varS1 que je suis aux prises avec. Je reçois le message d'erreur:

syntax error: invalid arithmetic operator (error token is ".886438") 

J'ai aussi essayé:

varS1=$(($varStdBase**2)) 

et:

let varS1=$varStdBase**2 

aussi:

varS1=$(echo $(($varStdBase**2))) 

Et plus, tout pas de résultat ...

Je me bats difficilement pour essayer de comprendre la syntaxe que bash veut faire cette tâche simple.

Merci!

+0

Mettez' set -x' en haut de l'écriture Ainsi, vous pouvez voir comment bash fait la substitution de variables. –

+0

Merci! Cela aide beaucoup avec le dépannage – ramenloverli

Répondre

1

Ce:

echo '$varStdBase^2'|bc 

donne une erreur puisque les guillemets simples ne permettent pas une valeur variable à être étendue. Cependant, l'utilisation des guillemets doubles seront:

echo "$varStdBase^2"|bc 

par exemple

$ a=123 
$ echo "$a^2"|bc 
15129 

(le message d'erreur erreur de syntaxe: opérateur arithmétique non valide (jeton d'erreur est » 0,886438") vient de l'exécutable bc, ndlr)

+0

AH! Oui ça a marché. Merci beaucoup pour la réponse rapide! – ramenloverli