variable script from linux bash shell variable-assignment multiple-variable-return

linux - from - variables in shell script bash



Linux bash: asignación de variables múltiples (5)

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/a n/a n/a

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 sintaxis 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 sintaxis de acceso directo. ¿Es posible?


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]}`)


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.


Lo primero que me viene a la mente es

read -r a b c <<<$(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.