Linux bash: Plusieurs affectation de variable
N'existe pas sous linux bash quelque chose de semblable à la suivante de code en PHP:
list($var1, $var2, $var3) = function_that_returns_a_three_element_array() ;
c'est à dire que vous attribuez à une phrase d'une valeur correspondante à 3 variables différentes.
Disons que j'ai le bash fonction myBashFuntion
qui écrit sur la sortie standard la chaîne "qwert asdfg zxcvb".
Est-il possible de faire quelque chose comme:
(var1 var2 var3) = ( `myBashFuntion param1 param2` )
La partie à gauche du signe égal n'est pas valide la syntaxe de cours. Je suis juste essayer d'expliquer ce que je demande.
Ce qui fonctionne, cependant, est la suivante:
array = ( `myBashFuntion param1 param2` )
echo ${array[0]} ${array[1]} ${array[2]}
Mais un tableau indexé n'est pas aussi descriptif que la plaine de noms de variables.
Cependant, je pourrais juste faire:
var1 = ${array[0]} ; var2 = ${array[1]} ; var3 = ${array[2]}
Mais ceux-ci sont plus que 3 états que je préfère éviter.
Je suis à la recherche d'un raccourci de la syntaxe. Est-il possible?
Vous devez vous connecter pour publier un commentaire.
Première chose qui vient à l'esprit:
sortie est, sans surprise
read -d
pour définir délimiteur?read -d "\n" v1 v2 <<<$(cmd)
fonctionne parfaitement. Merci!!!!read a b c < <(echo 1 2 3)
read a b c < <(echo 1 2 3)
est mieux parce que le retour d'état de laecho
de commande est maintenuecho
est inutile, mais j'ai été en utilisant cette technique pour retourner plusieurs valeurs à partir d'un script que j'ai fait des soins sur l'état de retour. Je pensais que je voudrais partager mes découvertes.3.6.7 Here Strings
de gnu.org/software/bash/manual/bash.html — fondamentalement, il fournit ce qui suit après l'expansion de la stdin de la commande invoquée.read -r
:do not allow backslashes to escape any characters
Je voulais affecter les valeurs d'un tableau. Ainsi, l'extension de Michael Krelin de l'approche, j'ai fait:
ce qui donne:
comme prévu.
a=( $(echo 2 4 6) ) ; echo ${a[0]} ${a[1]} ${a[2]}
read -r
:do not allow backslashes to escape any characters
Je pense que cela pourrait aider...
Afin de briser l'utilisateur saisi les dates (jj/mm/aaaa) dans mes scripts, je stocke le jour, le mois et l'année dans un tableau, et ensuite mettre les valeurs dans des variables séparées comme suit:
Parfois, vous avez à faire quelque chose de funky. Disons que vous voulez lire à partir d'une commande (la date par exemple SDGuero par exemple), mais vous voulez éviter de multiples fourches.
Vous pouvez également tuyau dans la commande de lecture, mais vous devrez alors utiliser les variables dans un shell interne est exécuté:
résultats dans...
read
commande n'arrive pas dans un shell interne est exécuté en raison de l'accolades, c'est parce que vous avez une commande de lecture sur le côté droit de la pipe. Vous devez exécuter leread
commande dans le shell courant, que vous pouvez faire commeread day month year <<< `date "+%d %m %Y"`
read
passe, mais la portée des variables qu'il lit dans les chutes hors de portée lorsque le shell interne est exécuté de la canalisation se termine.Chapitre 5 de la Bash Le Livre De Cuisine par O'Reilly, explique (un peu longuement) les raisons de l'exigence d'une affectation de variable qu'il n'y a pas d'espaces autour du " = " signe
L'explication a quelque chose à voir avec la distinction entre le nom d'une commande et d'une partie variable (où '=' peut être un argument valable).
Tout cela semble un peu comme justifiant après l'événement, mais en tout cas il n'est fait mention d'une méthode de l'affectation à une liste de variables.
;
" est un argument valable? Quand j'écrisls ; cd
il appelle encorels
etcd
malgré les espaces. Si je veux la liste des répertoires appelés;
etcd
je peux tout typels ';' cd
.