Pregunta

¿Existe en bash de Linux algo similar al siguiente código en PHP:

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

es decir. se asigna en una frase un valor correspondiente a 3 variables diferentes.

Digamos que tengo el myBashFuntion función de bash que escribe en la salida estándar de la cadena "qwert asdfg zxcvb". ¿Es posible hacer algo como:

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

La parte de la izquierda del signo igual no es una sintaxis válida, por supuesto. Sólo estoy tratando de explicar lo que estoy pidiendo.

Lo que hace el trabajo, sin embargo, es la siguiente:

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

Pero una matriz indexada no es tan descriptiva como nombres de variables simples.
Sin embargo, tan sólo pudiera hacer:

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

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

Estoy buscando una sintaxis de acceso directo. ¿Es posible?

¿Fue útil?

Solución

La primera cosa que viene a la mente:

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

salida es, como era de esperar

1|2|3

Otros consejos

quería asignar los valores de una matriz. Por lo tanto, el enfoque de extender Michael Krelin , lo hice:

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

que produce:

2|4|6 

como se esperaba.

Creo que esto podría ayudar a ...

Con el fin de romper el usuario introduce las fechas (dd / mm / aaaa) en mis guiones, almaceno el día, el mes y el año en una matriz, y luego poner 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 hay que hacer algo funky. Digamos que usted quiere leer un comando (por ejemplo, la fecha de la SDGuero por ejemplo), pero se quiere evitar múltiples horquillas.

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

también podría tubo en el comando de lectura, pero entonces habría que utilizar las variables dentro de un subnivel:

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

Capítulo 5 de la Bash Cookbook por O'Reilly, discute (con cierta extensión) las razones de el requisito de una asignación de variables que no haya espacios alrededor de muestra las '='

MYVAR="something"

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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top