Frage

Gibt es in Linux-Bash etwas ähnlich den folgenden Code in PHP:

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

d. Sie weisen Sie in einem Satz ein entsprechender Wert auf 3 verschiedenen Variablen.

Lassen Sie uns sagen, dass ich die Bash-Funktion myBashFuntion haben, dass schreibt die Zeichenfolge an stdout „qwert asdfg ZXCVB“. Ist es möglich, so etwas wie zu tun:

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

Der Teil auf der linken Seite des Gleichheitszeichens ist nicht gültig Syntax natürlich. Ich versuche nur zu erklären, was ich um.

Was funktioniert, obwohl, ist die folgende:

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

Aber ein indiziertes Array ist nicht so ausführlich wie Normalvariablennamen.
Allerdings konnte ich nur tun:

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

Aber das sind 3 weitere Aussagen, dass ich lieber vermeiden würde.

Ich bin nur für eine Verknüpfung Syntax. Ist es möglich?

War es hilfreich?

Lösung

Das erste, was mir in den Sinn kommt:

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

ausgegeben wird, wenig überraschend

1|2|3

Andere Tipps

Ich wollte die Werte in einem Array zuweisen. So erstreckt Michael Krelin Ansatz , ich habe:

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

, die ergibt:

2|4|6 

wie erwartet.

Ich denke, das könnte helfen ...

Um Benutzer zu brechen eingegeben Daten (mm / tt /) in meine Skripte, speichere ich den Tag, Monat und Jahr in ein Array, und dann die Werte in separate Variablen setzen sich wie folgt:

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

Manchmal muss man etwas flippig tun. Angenommen, Sie haben von einem Befehl (dem Datum Beispiel durch SDGuero zum Beispiel) lesen möchten, aber Sie wollen mehrere Gabeln vermeiden.

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

Sie könnten auch über die Pipeline in den Lesebefehl, aber dann würden Sie die Variablen innerhalb einer Subshell verwenden müssen:

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

Ergebnisse in ...

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

Kapitel 5 des Bash-Kochbuch von O'Reilly, bespricht (mit einiger Ausführlichkeit) die Gründe für die Anforderung in einer Variablenzuweisung, dass es keine Leerzeichen um die ‚=‘ Zeichen dafür sein,

MYVAR="something"

Die Erklärung hat etwas mit Unterscheidung zwischen dem Namen eines Befehls und einer Variablen zu tun (wobei ‚=‘ kann ein gültiges Argument sein).

Das scheint alles ein wenig wie nach dem Ereignis zu rechtfertigen, aber auf jeden Fall gibt es keine Erwähnung eines Verfahrens zur Herstellung von Variablen zu einer Liste zugeordnet werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top