2010-03-16 8 views
1

c'est probablement une question très stupide; dans un script bash, compte tenu de la sortie de, par exemple;Comment affecter la sortie d'une commande à une variable?

awk '{print $7}' temp 

donne 0,54546

Je voudrais donner ceci à une variable, alors j'ai essayé:

read ENE <<< $(awk '{print $7}' temp) 

mais je reçois

Syntax error: redirection unexpected 

Pourriez-vous me dire pourquoi , et quelle est la manière la plus facile de faire cette tâche?

Merci

+1

Bien que gênante,' read ENE <<< $ (awk '{print $ 7}' temp) 'fonctionne pour moi, donc je suis incapable de dire ce qui est cassé là-bas? Êtes-vous sûr de travailler avec bash et pas avec un autre shell? Qu'est-ce que 'bash --version' utilisez-vous? –

Répondre

2

votre syntaxe devrait être

read ENE <<<$(awk '{print $1}' file) 

vous pouvez affecter directement la valeur et

ENE=$(awk '{print $7}' temp) 

vous pouvez également utiliser le shell

$ var=$(< temp) 
$ set -- $var 
$ echo $7 

ou vous pouvez le lire dans un tableau

$ declare -a array 
$ read -a array <<<$(<file) 
$ echo ${array[6]} 
3

Vous pouvez effectuer la substitution de commande comme:

ENE=$(awk '{print $7}' temp) 

ou

ENE=`awk '{print $7}' temp` 

Cela affectera la valeur 0.54546 à la variable ENE

+0

super, merci beaucoup! En passant, quelqu'un sait pourquoi le précédent n'a pas wok? – flow

0

En général , Bash est un peu sensible aux espaces (les obligeant à certains endroits, et se cassant s'ils sont ajoutés ed à d'autres endroits,) qui à mon avis est trop mauvais. Rappelez-vous juste qu'il ne devrait pas y avoir d'espace de chaque côté d'un signe égal, il ne devrait pas y avoir d'espace, et les parenthèses devraient être alignées avec des espaces (comme ceci) (pas comme ça.)

` command` et $ (commande) sont la même chose, mais $ (cette version peut être $ (imbriquée)) alors que "cette version peut être` intégrée dans des chaînes.` "

Questions connexes