Linux bash: affectation de variables multiples

Existe-t-il dans linux bash quelque chose de similaire au code suivant en PHP:

list($var1, $var2, $var3) = function_that_returns_a_three_element_array() ; 

c’est-à-dire que vous atsortingbuez en une phrase une valeur correspondante à 3 variables différentes.

Disons que j’ai la fonction bash myBashFuntion qui écrit sur stdout 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 bien sûr pas une syntaxe valide. J’essaie juste d’expliquer ce que je demande.

Ce qui fonctionne, cependant, est le suivant:

 array = ( `myBashFuntion param1 param2` ) echo ${array[0]} ${array[1]} ${array[2]} 

Mais un tableau indexé n’est pas aussi descriptif que les noms de variables simples.
Cependant, je pourrais juste faire:

 var1 = ${array[0]} ; var2 = ${array[1]} ; var3 = ${array[2]} 

Mais ce sont trois autres déclarations que je préférerais éviter.

Je cherche juste une syntaxe de raccourci. C’est possible?

La première chose qui me vient à l’esprit:

 read -rabc <<<$(echo 1 2 3) ; echo "$a|$b|$c" 

la sortie est, sans surprise

 1|2|3 

Je voulais assigner les valeurs à un tableau. Ainsi, en étendant l’approche de Michael Krelin , j’ai fait:

 read a[{1..3}] <<< $(echo 2 4 6); echo "${a[1]}|${a[2]}|${a[3]}" 

qui donne:

 2|4|6 

comme prévu.

Je pense que cela pourrait aider …

Afin de décomposer les dates entrées par les utilisateurs (mm / jj / aaaa) dans mes scripts, je stocke le jour, le mois et l’année dans un tableau, puis placez les valeurs dans des variables distinctes comme suit:

 DATE_ARRAY=(`echo $2 | sed -e 's/\// /g'`) MONTH=(`echo ${DATE_ARRAY[0]}`) DAY=(`echo ${DATE_ARRAY[1]}`) YEAR=(`echo ${DATE_ARRAY[2]}`) 

Parfois, vous devez faire quelque chose de funky. Disons que vous voulez lire une commande (exemple de date par SDGuero par exemple), mais vous voulez éviter plusieurs forks.

 read month day year << DATE_COMMAND $(date "+%m %d %Y") DATE_COMMAND echo $month $day $year 

Vous pouvez également insérer des commandes dans la commande read, mais vous devrez alors utiliser les variables dans un sous-shell:

 day=n/a; month=n/a; year=n/a date "+%d %m %Y" | { read day month year ; echo $day $month $year; } echo $day $month $year 

résulte en...

 13 08 2013 n/an/an/a 

Le chapitre 5 du livre de recettes Bash, rédigé par O’Reilly, expose (à un certain niveau) les raisons de l’exigence dans une affectation de variable qu’il n’y ait pas d’espaces autour du signe ‘=’

 MYVAR="something" 

L’explication a quelque chose à voir avec la distinction entre le nom d’une commande et une variable (où ‘=’ peut être un argument valide).

Tout cela ressemble un peu à la justification après l’événement, mais en aucun cas il n’est question d’une méthode d’affectation à une liste de variables.