Linux bash: asignación de variables múltiples

Existe en linux bash algo similar al siguiente código en PHP:

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

es decir, asigna en una oración el valor correspondiente a 3 variables diferentes.

Digamos que tengo la función bash myBashFuntion que escribe para stdout la cadena “qwert asdfg zxcvb”. ¿Es posible hacer algo como esto?

 (var1 var2 var3) = ( `myBashFuntion param1 param2` ) 

La parte a la izquierda del signo igual no es syntax válida, por supuesto. Solo estoy tratando de explicar lo que estoy pidiendo.

Lo que funciona, sin embargo, es lo siguiente:

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

Pero una matriz indexada no es tan descriptiva como los nombres de las variables simples.
Sin embargo, podría hacer lo siguiente:

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

Pero esas son 3 declaraciones más que preferiría evitar.

Solo estoy buscando una syntax de acceso directo. ¿Es posible?

Lo primero que me viene a la mente es

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

la producción es, como era de esperar

 1|2|3 

Quería asignar los valores a una matriz. Entonces, extendiendo el enfoque de Michael Krelin , lo hice:

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

cuyos rendimientos:

 2|4|6 

como se esperaba.

Creo que esto podría ayudar …

Para desglosar las fechas ingresadas por el usuario (mm / dd / aaaa) en mis scripts, almaceno el día, mes y año en una matriz, y luego pongo los valores en variables separadas de la siguiente manera:

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

A veces tienes que hacer algo funky. Supongamos que quiere leer un comando (ejemplo de fecha de SDGuero, por ejemplo), pero desea evitar varias bifurcaciones.

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

También podría insertar el comando de lectura, pero luego tendría que usar las variables dentro de una subcapa:

 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 

resultados en ...

 13 08 2013 n/an/an/a 

El Capítulo 5 del Bash Cookbook de O’Reilly discute (con cierta extensión) los motivos del requisito en una asignación variable de que no haya espacios alrededor del signo ‘=’

 MYVAR="something" 

La explicación tiene algo que ver con distinguir entre el nombre de un comando y una variable (donde ‘=’ puede ser un argumento válido).

Todo esto parece un poco como justificar después del evento, pero en cualquier caso no se menciona un método para asignar a una lista de variables.