como obter elementos da lista no bash?

40

Aqui está uma lista:

List = "abcd 1234 jvm something"

Como obter o segundo elemento "1234" sem repetir toda a lista?

SpawnST
fonte

Respostas:

50

sem espaços entre o sinal de igual

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

Algumas outras maneiras, embora não sejam tão eficientes quanto o uso de componentes internos do 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
user31894
fonte
Obrigado. Você gostaria de dar alguns comentários no código, por favor?
SpawnST
11
Quero dizer a segunda linha.
SpawnST
17
@Spawn set -- $somethingsplits $somethingno $IFSpersonagem (por espaço padrão) e atribui a peças de divisão para as variáveis posicionais $1, $2...
Benjamin Bannier
43

Apenas para complementar a resposta do ghostdog: você também pode colocar $Listos elementos de um array e acessar o elemento específico da lista a partir daí

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

Observe que os índices da matriz são contados 0,1,2, ....

Isso tem a vantagem de não poluir o ambiente do shell com muitas variáveis ​​novas.

Benjamin Bannier
fonte
Isso é bom :-).
SpawnST
11
Não precisa echo: arr=($List)
user31894
comportamento provavelmente compulsivo do @ghostdog, editado.
Benjamin Bannier
@BenjaminBannier, como você pode selecionar vários elementos. Existe alguma sintaxe como $ {arr [1,2,3]} $ (não isso, desde que tentei, mas assim) ou preciso usar um loop for.
Kvothe 4/04