Gibt es in Linux Bash etwas Ähnliches wie den folgenden Code in PHP:
list($var1, $var2, $var3) = function_that_returns_a_three_element_array() ;
dh Sie weisen 3 verschiedenen Variablen in einem Satz einen entsprechenden Wert zu.
myBashFuntion
Angenommen , ich habe die Bash-Funktion , die schreibt, um die Zeichenfolge "qwert asdfg zxcvb" zu stdouten. Ist es möglich, etwas zu tun wie:
(var1 var2 var3) = ( `myBashFuntion param1 param2` )
Der Teil links vom Gleichheitszeichen ist natürlich keine gültige Syntax. Ich versuche nur zu erklären, wonach ich frage.
Was jedoch funktioniert, ist Folgendes:
array = ( `myBashFuntion param1 param2` )
echo ${array[0]} ${array[1]} ${array[2]}
Ein indiziertes Array ist jedoch nicht so beschreibend wie einfache Variablennamen.
Ich könnte jedoch einfach Folgendes tun:
var1 = ${array[0]} ; var2 = ${array[1]} ; var3 = ${array[2]}
Aber das sind 3 weitere Aussagen, die ich lieber vermeiden würde.
Ich suche nur nach einer Verknüpfungssyntax. Ist es möglich?
read -d "\n" v1 v2 <<<$(cmd)
funktioniert perfekt. Danke dir!echo
ist sinnlos, aber ich habe diese Technik verwendet, um mehrere Werte aus einem Skript zurückzugeben, bei dem mir der Rückgabestatus wichtig war. Ich dachte, ich würde meine Erkenntnisse teilen.read -r
:do not allow backslashes to escape any characters
Ich wollte die Werte einem Array zuweisen. Als ich Michael Krelins Ansatz erweiterte , tat ich Folgendes:
was ergibt:
wie erwartet.
quelle
a=( $(echo 2 4 6) ) ; echo ${a[0]} ${a[1]} ${a[2]}
read -r
:do not allow backslashes to escape any characters
Ich denke, das könnte helfen ...
Um vom Benutzer eingegebene Daten (MM / TT / JJJJ) in meinen Skripten aufzuschlüsseln, speichere ich Tag, Monat und Jahr in einem Array und füge die Werte dann wie folgt in separate Variablen ein:
quelle
IFS=/ read -r m d y < <(echo 12/29/2009)
Manchmal muss man etwas Funky machen. Angenommen, Sie möchten aus einem Befehl lesen (z. B. das Datumsbeispiel von SDGuero), möchten jedoch mehrere Gabeln vermeiden.
Sie könnten auch in den Befehl read einleiten, müssten dann aber die Variablen in einer Subshell verwenden:
führt zu ...
quelle
read
Befehl kommt aufgrund der geschweiften Klammern nicht in einer Unterschale vor, sondern weil Sie den Lesebefehl auf der rechten Seite der Pipe haben. Sie müssen denread
Befehl in der aktuellen Shell ausführen , was Sie tun könnenread day month year <<< `date "+%d %m %Y"`
read
passiert, aber der Bereich der Variablen, in die es eingelesen wird, fällt aus dem Bereich heraus, wenn die Unterschale der Pipeline endet.In Kapitel 5 des Bash Cookbook von O'Reilly werden (ausführlich) die Gründe für die Anforderung in einer Variablenzuweisung erörtert, dass um das Zeichen '=' keine Leerzeichen vorhanden sind
Die Erklärung hat etwas mit der Unterscheidung zwischen dem Namen eines Befehls und einer Variablen zu tun (wobei '=' ein gültiges Argument sein kann).
Dies alles scheint ein wenig wie eine Rechtfertigung nach dem Ereignis zu sein, aber auf jeden Fall wird keine Methode zum Zuweisen zu einer Liste von Variablen erwähnt.
quelle
;
' ein gültiges Argument ist? Wenn ich schreibels ; cd
, ruft es immer nochls
undcd
trotz der Leerzeichen. Wenn ich aufgerufene Verzeichnisse auflisten möchte;
undcd
einfach tippen kannls ';' cd
.