Ich versuche im Wesentlichen, bestimmte Teile der Ausgabe eines Shell-Befehls mehreren Variablen zuzuordnen, aber ich weiß nicht, wie das geht.
Nehmen Sie der Einfachheit halber an, dass der Befehl auf der Shell bei der Ausführung gedruckt wird
one two three four
was mit a simuliert werden kann
echo "one two three four"
(obwohl das tatsächliche comannd anders ist)
Nun möchte ich den Variablen w1 und w2 das zweite und vierte Wort der Ausgabe (in diesem Fall zwei und vier ) zuweisen .
Ich dachte, ich könnte den Lesebefehl folgendermaßen verwenden :
echo "one two three four" | awk '{print $2 " " $4}' | read w1 w2
aber dies nicht funktioniert, wahrscheinlich , weil der Lesebefehl in einem Teilprozess ausgeführt wird.
Wie würde ich also vorgehen, um das zu erreichen, wonach ich strebe?
Antworten:
Dies funktioniert nicht, da die Ausführung
read
in einem untergeordneten Prozess erfolgt, der die Umgebung der übergeordneten Umgebung nicht beeinflussen kann.Sie haben einige Möglichkeiten:
Sie können Ihren Befehl konvertieren in:
Alternativ können Sie IFS ändern und Folgendes verwenden
set
:oder ein Here String:
quelle
<<< Here String
read -r
:do not allow backslashes to escape any characters