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 un valor correspondiente a 3 variables diferentes.
Digamos que tengo la función bash myBashFuntion
que escribe en stdout la cadena "qwert asdfg zxcvb". ¿Es posible hacer algo como:
(var1 var2 var3) = ( `myBashFuntion param1 param2` )
Por supuesto, la parte a la izquierda del signo igual no es una sintaxis válida. Solo intento explicar lo que estoy pidiendo.
Sin embargo, lo que funciona 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 simples de variables.
Sin embargo, podría hacer:
var1 = ${array[0]} ; var2 = ${array[1]} ; var3 = ${array[2]}
Pero esas son 3 declaraciones más que prefiero evitar.
Solo busco una sintaxis de atajo. ¿Es posible?
read -d "\n" v1 v2 <<<$(cmd)
funciona perfectamente. ¡Gracias!echo
tiene sentido, pero estaba usando esta técnica para devolver varios valores de un script que me importaba el estado de devolución. Pensé en compartir mis hallazgos.read -r
:do not allow backslashes to escape any characters
Quería asignar los valores a una matriz. Entonces, extendiendo el enfoque de Michael Krelin , lo hice:
cuyos rendimientos:
como se esperaba.
fuente
a=( $(echo 2 4 6) ) ; echo ${a[0]} ${a[1]} ${a[2]}
read -r
:do not allow backslashes to escape any characters
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 coloco los valores en variables separadas de la siguiente manera:
fuente
IFS=/ read -r m d y < <(echo 12/29/2009)
A veces tienes que hacer algo raro. Supongamos que desea leer un comando (el ejemplo de fecha de SDGuero, por ejemplo) pero desea evitar múltiples bifurcaciones.
También podría ingresar al comando de lectura, pero luego tendría que usar las variables dentro de una subcapa:
resulta en ...
fuente
read
comando no ocurre en una subcapa debido a las llaves, es porque tiene el comando de lectura en el lado derecho de la tubería. Debe ejecutar elread
comando en el shell actual, lo que puede hacer comoread day month year <<< `date "+%d %m %Y"`
read
sucede, pero el alcance de las variables que lee queda fuera del alcance cuando finaliza la subcapa de la canalización.El capítulo 5 del Bash Cookbook de O'Reilly analiza (con cierta extensión) las razones del requisito en una asignación de variable de que no haya espacios alrededor del signo '='
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 una justificación después del evento, pero en cualquier caso no se menciona un método de asignación a una lista de variables.
fuente
;
' es un argumento válido? Cuando escribols ; cd
todavía llamals
ycd
pese a los espacios. Si quiero enumerar los directorios llamados;
ycd
puedo escribirls ';' cd
.