comment obtenir des éléments de la liste dans bash?


40

Voici une liste:

List = "abcd 1234 jvm something"

Comment obtenir le deuxième élément "1234" sans boucler toute la liste?

Réponses:


50

aucun espace entre signe égal

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

Quelques autres moyens, bien que moins efficaces que l'utilisation des composants internes de 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

Merci. Souhaitez-vous commenter dans le code s'il vous plait?
SpawnST

1
Je veux dire la deuxième ligne.
SpawnST

17
@Spawn set -- $somethingscissions $somethingau $IFScaractère (par l' espace par défaut) et attribue les pièces fendus aux variables de position $1, $2...
Benjamin Bannier

43

Juste pour compléter la réponse de ghostdog: vous pouvez également mettre $Listles éléments de s dans un tableau et accéder à l'élément de liste spécifique à partir de là.

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

Notez que les indices de tableau sont comptés 0,1,2, ....

Cela a l'avantage de ne pas polluer l'environnement shell avec trop de nouvelles variables.


C'est bien. :-)
SpawnST

1
pas besoin de echo: arr=($List)
user31894

@ghostdog comportement probablement compulsif, édité.
Benjamin Bannier

@ BenjaminBannier, comment sélectionner plusieurs éléments Existe-t-il une syntaxe telle que $ {arr [1,2,3]} $ (pas ceci, puisque j'ai essayé, mais comme cela) ou dois-je utiliser une boucle for.
Kvothe le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.