Domanda

esiste in linux bash qualcosa di simile al seguente codice in PHP:

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

vale a dire. si assegna in una frase un valore corrispondente a 3 variabili differenti.

Diciamo che ho la funzione di myBashFuntion bash che scrive su stdout la stringa "qwert asdfg zxcvb". E 'possibile fare qualcosa di simile:

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

La parte a sinistra del segno di uguale non è sintassi valida naturalmente. Sto solo cercando di spiegare quello che sto chiedendo.

Che cosa significa il lavoro, però, è il seguente:

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

Ma un array indicizzato non è descrittivo come nomi di variabili semplici.
Tuttavia, ho potuto solo fare:

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

Ma queste sono altre 3 affermazioni che avrei preferito evitare.

Sono solo in cerca di una sintassi di scelta rapida. E 'possibile?

È stato utile?

Soluzione

La prima cosa che mi viene in mente:

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

uscita è, ovviamente

1|2|3

Altri suggerimenti

ho voluto assegnare i valori di un array. Così, di estendere Michael Krelin approccio , ho fatto:

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

che produce:

2|4|6 

come previsto.

Credo che questo potrebbe aiutare ...

Al fine di abbattere utente date immesso (gg / mm / aaaa) nei miei scritti, ho negozio il giorno, il mese e l'anno in una matrice, e poi mettere i valori in variabili distinte nel seguente modo:

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

A volte è necessario fare qualcosa di funky. Diciamo che si desidera leggere da un comando (l'esempio data entro SDGuero per esempio), ma si vuole evitare molteplici forchette.

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

Si potrebbe anche tubo nel comando di lettura, ma poi si avrebbe dovuto utilizzare le variabili all'interno di una subshell:

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

Risultati in ...

13 08 2013
n/a n/a n/a

Capitolo 5 del Bash Cookbook da O'Reilly, discute (con una certa ampiezza) le ragioni il requisito di cui l'assegnazione di variabile che non vi siano spazi intorno firmare il '='

MYVAR="something"

La spiegazione ha a che fare con la distinzione tra il nome di un comando e una variabile (dove '=' può essere un argomento valido).

Tutto questo sembra un po 'come giustificare dopo l'evento, ma in ogni caso non si fa menzione di un metodo di assegnazione ad un elenco di variabili.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top