¿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?

SpawnST
fuente

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
usuario31894
fuente
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.

Benjamin Bannier
fuente
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