¿Cómo obtener elementos de la lista en bash?


40

Aquí hay una LISTA:

List = "abcd 1234 jvm something"

¿Cómo obtener el segundo elemento "1234" sin recorrer toda la lista?

Respuestas:


50

sin espacios entre signo igual

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

Algunas otras formas, aunque no tan eficientes como el uso de componentes internos 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

Gracias. ¿Podría dar algunos comentarios en el código por favor?
SpawnST

1
Me refiero a la segunda línea.
SpawnST

17
@Spawn set -- $somethingescisiones $somethingen el $IFScarácter (por el espacio por defecto) y cesionarios las partes divididas a las variables de posición $1, $2, ...
Benjamin Bannier

43

Solo para complementar la respuesta de ghostdog: también puede poner $Listlos elementos de una matriz y acceder al elemento de lista específico desde allí

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

Tenga en cuenta que los índices de la matriz se cuentan 0,1,2, ....

Esto tiene la ventaja de no contaminar el entorno de shell con demasiadas variables nuevas.


Eso es bueno. :-)
SpawnST

1
no es necesario echo: arr=($List)
user31894

@ghostdog probablemente comportamiento compulsivo, editado.
Benjamin Bannier

@BenjaminBannier, ¿cómo puede seleccionar varios elementos? ¿Hay alguna sintaxis como $ {arr [1,2,3]} $ (no esto, ya que lo intenté, pero me gusta esto) o necesito usar un bucle for.
Kvothe
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.