come ottenere elementi dalla lista in bash?


40

Ecco un ELENCO:

List = "abcd 1234 jvm something"

Come ottenere il secondo elemento "1234" senza ripetere l'intero elenco?

Risposte:


50

nessuno spazio tra uguale segno

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

Alcuni altri modi, sebbene non efficienti quanto l'uso degli interni della shell

$ 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

Grazie. Per favore, potresti dare qualche commento nel codice?
SpawnST

1
Intendo la seconda riga.
SpawnST

17
@Spawn set -- $somethingdivide $somethingal $IFScarattere (da spazio di default) e cessionari delle parti scisse alle variabili di posizione $1, $2...
Benjamin Bannier

43

Solo per integrare la risposta di ghostdog: potresti anche mettere $Listgli elementi di un array e accedere da quel punto all'elenco specifico

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

Si noti che gli indici di array vengono conteggiati 0,1,2, ....

Questo ha il vantaggio di non inquinare l'ambiente shell con troppe nuove variabili.


Che bello. :-)
SpawnST

1
non c'è bisogno di echo: arr=($List)
user31894

@ghostdog probabilmente comportamento compulsivo, modificato.
Benjamin Bannier,

@BenjaminBannier, come puoi selezionare più elementi. C'è qualche sintassi come $ {arr [1,2,3]} $ (non questo, da quando ho provato, ma come questo) o devo usare un ciclo for.
Kvothe
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.