¿Sabes por qué lo siguiente no convierte la cadena en array?
STR="one two three"
array=("$STR")
echo "${array[@]}" # prints: one two three
echo "len: ${#array[@]}" # prints: len: 1
echo "item: ${array[2]}" # prints: <nothing>
¿Sabes por qué lo siguiente no convierte la cadena en array?
STR="one two three"
array=("$STR")
echo "${array[@]}" # prints: one two three
echo "len: ${#array[@]}" # prints: len: 1
echo "item: ${array[2]}" # prints: <nothing>
En ZSH puedes utilizar un expansión de parámetros . Aquí, el s: :
La expansión se utiliza para s
plir la cadena en que podría ser difícil de ver; podríamos llamarlo valor decimal ASCII 32 o simplemente espacio.
% string="foo bar"
% array=(${(s: :)string})
% print $array[1]
foo
El bash
El código de esta página no es realmente seguro en todas las condiciones. El shell POSIX hace por defecto un auto-split (que en este caso es deseado) y un auto-glob (que puede ser muy indeseable; si algún carácter glob entra en el string
y luego coinciden con los archivos en el directorio de trabajo actual):
bash-5.1$ string="who* foo"
bash-5.1$ array=($string)
bash-5.1$ echo ${array[@]}
whoops.app whoops.png whoops.txt foo
bash-5.1$ printf '%s\n' ${array[@]}
whoops.app
whoops.png
whoops.txt
foo
bash-5.1$ ls whoops.*
whoops.app whoops.png whoops.txt
¡¡Sorpresa!!
(ZSH no es compatible con POSIX, por lo que no hace lo de dividir automáticamente las variables sin comillas (por defecto), gracias a Dios).
AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.