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?

SpawnST
sumber

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
pengguna31894
sumber
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.

Benjamin Bannier
sumber
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