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?

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

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.