як отримати елементи зі списку в bash?


36

Ось СПИСОК:

List = "abcd 1234 jvm something"

Як отримати другий елемент "1234" без циклічного переліку всіх списків?

Відповіді:


49

немає пробілів між знаком рівності

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

Деякі інші способи, хоча і не настільки ефективні, як використання внутрішніх оболонок оболонки

$ 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

Спасибі. Ви б дали коментарі до коду, будь ласка?
SpawnST

1
Я маю на увазі другий рядок.
SpawnST

17
@Spawn set -- $somethingрозщеплюється $somethingна $IFSхарактер (за замовчуванням простору) і привласнює розщеплені частини позиційним змінних $1, $2...
Бенджамін Bannier

41

Просто для доповнення відповіді ghostdog: ви також можете помістити $Listелементи в масив і отримати доступ до певного елемента списку звідти

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

Зауважимо, що індекси масиву підраховуються 0,1,2, ....

Це має перевагу в тому, що не забруднює середовище оболонки занадто великою кількістю нових змінних.


Це добре. :-)
SpawnST

1
не потрібно echo: arr=($List)
user31894

@ghostdog, ймовірно, нав'язлива поведінка, відредаговано.
Бенджамін Баньє

@BenjaminBannier, як можна вибрати кілька елементів. Чи є якийсь синтаксис на зразок $ {arr [1,2,3]} $ (не це, оскільки я намагався, але так), чи мені потрібно використовувати цикл.
Квоте
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.