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?

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

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.