matrices ejemplos arrays bash

arrays - ejemplos - bash split string



bash imprime elementos de matriz en lĂ­neas separadas (5)

Intenté las respuestas aquí en un gigante para ... si es loop, pero no me gustó nada, así que lo hice así, tal vez desordenado pero hice el trabajo:

# EXP_LIST2 is iterated # imagine a for loop EXP_LIST="List item" EXP_LIST2="$EXP_LIST2 /n $EXP_LIST" done echo -e $EXP_LIST2

aunque eso agregó un espacio a la lista, lo cual está bien, quería que se sangrara un poco. Supongamos también que "/ n" podría imprimirse en el $ EP_LIST original.

¿Cómo imprimo el elemento de matriz de una matriz de Bash en líneas separadas? Este funciona, pero seguramente hay una mejor manera:

$ my_array=(one two three) $ for i in ${my_array[@]}; do echo $i; done one two three

Intenté este pero no funcionó:

$ IFS=$''/n'' echo ${my_array[*]} one two three


Intenta hacer esto:

$ printf ''%s/n'' "${my_array[@]}"

La diferencia entre $@ y $* :

  • Sin comillas, los resultados no están especificados. En Bash, ambos se expanden para separar args y luego wordsplit y globbed.

  • Citado, "$@" expande cada elemento como un argumento separado, mientras que "$*" expande a los args fusionados en un argumento: "$1c$2c..." (donde c es el primer carácter de IFS ).

Casi siempre quieres "$@" . Lo mismo ocurre con "${arr[@]}" .

¡Cítalos siempre!


Otra variante útil es pipe to tr :

echo ${my_array[@]} | tr " " "/n"

Esto parece simple y compacto


Simplemente cite el argumento para repetir:

( IFS=$''/n''; echo "${my_array[*]}" )

el subconjunto ayuda a restablecer el IFS después del uso


Usando para :

for each in "${alpha[@]}" do echo "$each" done

Usando la historia ; ¡tenga en cuenta que esto fallará si sus valores contienen ! :

history -p "${alpha[@]}"

Usando el nombre base tenga en cuenta que esto fallará si sus valores contienen / :

basename -a "${alpha[@]}"

Usando shuf ; tenga en cuenta que los resultados pueden no estar en orden:

shuf -e "${alpha[@]}"