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..."
(dondec
es el primer carácter deIFS
).
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[@]}"