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.