Question

existe dans bash linux quelque chose de similaire au code suivant en PHP:

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

i.e.. vous assignez dans une phrase, une valeur correspondant à 3 variables différentes.

Disons que j'ai la myBashFuntion fonction bash qui écrit à stdout la chaîne « qwert xdr zxcvb ». Est-il possible de faire quelque chose comme:

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

La partie à gauche du signe égal n'est pas une syntaxe valide bien sûr. Je suis juste essayer d'expliquer ce que je demande.

Qu'est-ce que le travail, cependant, est la suivante:

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

Mais un tableau indexé n'est pas aussi descriptif que les noms de variables simples.
Cependant, je pouvais faire:

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

Mais ce sont 3 autres déclarations que je préfèrerais éviter.

Je suis à la recherche d'une syntaxe raccourci. Est-il possible?

Était-ce utile?

La solution

La première chose qui me vient à l'esprit:

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

sortie est, sans surprise

1|2|3

Autres conseils

Je voulais assigner les valeurs à un tableau. Alors, l'extension Michael approche Krelin , je l'ai fait:

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

ce qui donne:

2|4|6 

comme prévu.

Je pense que cela pourrait aider ...

Pour briser l'utilisateur entré dates dans mes scripts (mm / jj / aaaa), je magasin le jour, le mois et l'année dans un tableau, puis mettre les valeurs en variables distinctes comme suit:

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

Parfois, vous devez faire quelque chose funky. Disons que vous voulez lire à partir d'une commande (l'exemple par date SDGuero par exemple), mais vous voulez éviter de multiples fourches.

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

Vous pouvez également tuyau dans la commande de lecture, mais alors vous devez utiliser les variables dans un sous-shell:

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

résultats dans ...

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

Chapitre 5 du Bash livre de recettes par O'Reilly, discute (longuement) les raisons de l'exigence d'une affectation de variable qu'il n'y ait pas d'espace autour de panneau « = »

MYVAR="something"

L'explication a quelque chose à voir avec la distinction entre le nom d'une commande et une variable (où « » peut être un argument valable).

Tout cela semble un peu comme justifiant après l'événement, mais en tout cas il n'y a aucune mention d'une méthode d'attribution à une liste de variables.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top