Вопрос: как получить элементы из списка в bash?


Вот список:

List = "abcd 1234 jvm something"

Как получить второй элемент «1234» без перебора всего списка?


31
2018-03-19 03:19


Источник




Ответы:


нет пробелов между равным знаком

$ 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

41
2018-03-19 03:27



Спасибо. Вы могли бы дать некоторые комментарии в коде, пожалуйста? - SpawnST
Я имею в виду вторую строчку. - SpawnST
@Порождать set -- $something расколы $something на $IFS (по умолчанию пробел) и назначает разделенные части позиционным переменным $1,$2, ... - Benjamin Bannier


Просто чтобы дополнить ответ ghostdog: вы могли бы также поставить $List's в массив и доступ к определенному элементу списка оттуда

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

Обратите внимание, что индексы массива подсчитываются 0,1,2, ....

Это имеет то преимущество, что не загрязняет среду оболочки слишком большим количеством новых переменных.


34
2018-03-19 04:03



Это мило.:-) - SpawnST
не нужно echo: arr=($List) - user31894
@ghostdog, вероятно, компульсивное поведение, отредактировано. - Benjamin Bannier