jak zdobyć elementy z listy w bash?


40

Oto LISTA:

List = "abcd 1234 jvm something"

Jak zdobyć drugi element „1234” bez zapętlania całej listy?

Odpowiedzi:


50

bez spacji między znakiem równości

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

Niektóre inne sposoby, choć nie tak wydajne jak używanie wewnętrznych elementów powłoki

$ 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

Dzięki. Czy mógłbyś podać jakieś uwagi w kodzie?
SpawnST

1
Mam na myśli drugą linię.
SpawnST

17
@Spawn set -- $somethingrozłamów $somethingw $IFScharakterze (domyślnie spacja) i przypisuje częściach Splitu do zmiennych pozycyjnych $1, $2...
Benjamin Bannier

43

Tylko w celu uzupełnienia odpowiedzi ghostdog: możesz również umieścić $Listelementy w tablicy i stamtąd uzyskać dostęp do określonego elementu listy

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

Zauważ, że indeksy tablicowe są zliczane 0,1,2, ....

Ma to tę zaletę, że nie zanieczyszcza środowiska powłoki zbyt dużą liczbą nowych zmiennych.


To miło. :-)
SpawnST

1
nie trzeba echo: arr=($List)
user31894

@ghostdog prawdopodobnie kompulsywne zachowanie, zredagowane.
Benjamin Bannier

@BenjaminBannier, jak wybrać wiele elementów. Czy istnieje jakaś składnia, taka jak $ {arr [1,2,3]} $ (nie to, ponieważ próbowałem, ale tak to), czy też muszę użyć pętli for.
Kvothe
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.