bagaimana cara mendapatkan elemen dari daftar di bash?


40

Berikut adalah daftar:

List = "abcd 1234 jvm something"

Bagaimana cara mendapatkan elemen kedua "1234" tanpa mengulang semua daftar?

Jawaban:


50

tidak ada spasi di antara tanda sama dengan

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

Beberapa cara lain, meski tidak seefisien menggunakan internal 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

Terima kasih. Apakah Anda mau memberikan komentar dalam kode ini?
SpawnST

1
Maksud saya baris kedua.
SpawnST

17
@Spawn set -- $somethingperpecahan $somethingdi $IFSkarakter (dengan spasi default) dan penerima bagian split untuk variabel posisi $1, $2...
Benjamin Bannier

43

Hanya untuk melengkapi jawaban ghostdog: Anda juga bisa memasukkan $Listelemen ke dalam array dan mengakses elemen daftar tertentu dari sana

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

Perhatikan bahwa indeks array dihitung 0,1,2, ....

Ini memiliki keuntungan tidak mencemari lingkungan shell dengan terlalu banyak variabel baru.


Itu bagus. :-)
SpawnST

1
tidak perlu echo: arr=($List)
user31894

@ghostdog mungkin perilaku kompulsif, diedit.
Benjamin Bannier

@BenjaminBannier, bagaimana Anda bisa memilih beberapa elemen. Apakah ada beberapa sintaks seperti $ {arr [1,2,3]} $ (bukan ini, sejak saya mencoba, tapi seperti ini) atau apakah saya perlu menggunakan for loop.
Kvothe
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.