Wie bekomme ich Elemente aus der Liste in Bash?

40

Hier ist eine Liste:

List = "abcd 1234 jvm something"

Wie erhalte ich das zweite Element "1234", ohne die gesamte Liste zu durchlaufen?

SpawnST
quelle

Antworten:

50

Keine Leerzeichen zwischen Gleichheitszeichen

$ List="abcd 1234 jvm something"
$ set -- $List
$ echo $2
1234

Einige andere Möglichkeiten, obwohl nicht so effizient wie die Verwendung von Shell-Interna

$ echo $List | cut -d" " -f2
1234
$  echo $List | awk '{print $2}'
1234
$ echo $List | sed 's/^.[^ \t]* //;s/ .*//'
1234
$ echo $List | tr " " "\n"|sed -n '2p'
1234
user31894
quelle
Thanks.would geben Sie bitte einige Kommentare im Code?
SpawnST
1
Ich meine die zweite Zeile.
SpawnST
17
@Spawn set -- $somethingspaltet $somethingan der $IFSZeichen (mit Standard - Space) und ordnet die getrennten Teile der Positionsgrößen $1, $2...
Benjamin Bannier
43

Nur um die Antwort von ghostdog zu ergänzen: Sie können die $ListElemente auch in ein Array einfügen und von dort aus auf das spezifische Listenelement zugreifen

List="abcd 1234 jvm something"
arr=($List)
echo ${arr[1]}

Beachten Sie, dass die Array-Indizes mit 0,1,2, ... gezählt werden.

Dies hat den Vorteil, dass die Shell-Umgebung nicht mit zu vielen neuen Variablen belastet wird.

Benjamin Bannier
quelle
Das ist schön. :-)
SpawnST
1
Keine Notwendigkeit echo: arr=($List)
user31894
@ghostdog wahrscheinlich zwanghaftes Verhalten, bearbeitet.
Benjamin Bannier
@BenjaminBannier, wie können Sie mehrere Elemente auswählen. Gibt es eine Syntax wie $ {arr [1,2,3]} $ (nicht dies, da ich es versucht habe, aber so) oder muss ich eine for-Schleife verwenden.
Kvothe