J'essaie essentiellement d'assigner certaines parties de la sortie d'une commande shell à plusieurs variables, mais je ne sais pas comment faire.
Par souci de simplicité, supposons que la commande sur le shell, lorsqu'elle s'exécute, imprime
one two three four
qui peut être simulé avec un
echo "one two three four"
(bien que le comannd réel soit différent)
Maintenant, je voudrais affecter les deuxième et quatrième mots de la sortie (dans ce cas deux et quatre ) aux variables w1 et w2 .
Je pensais pouvoir utiliser la commande read comme ceci:
echo "one two three four" | awk '{print $2 " " $4}' | read w1 w2
mais cela ne fonctionne pas, probablement parce que la commande de lecture est exécutée dans un sous-processus.
Alors, comment pourrais-je réaliser ce que je recherche?
Réponses:
Cela ne fonctionne pas car les
read
exécutions dans un processus enfant ne peuvent pas affecter l'environnement du parent.Vous avez quelques options:
Vous pouvez convertir votre commande en:
Vous pouvez également modifier IFS et utiliser
set
:ou une chaîne Here:
la source
<<< Here String
read -r
:do not allow backslashes to escape any characters