Dans ZSH, vous pouvez utiliser une extension de paramètre. Ici, l'extension s: :
est utilisée pour s
éparer la chaîne sur qui peut être difficile à voir; nous pourrions l'appeler la valeur décimale ASCII 32 ou juste espace.
% string="foo bar"
% array=(${(s: :)string})
% print $array[1]
foo
Le code bash
ailleurs sur cette page n'est pas vraiment sûr dans toutes les conditions. Le shell POSIX par défaut fait une auto-séparation (ce qui est souhaitable ici) et un auto-glob (ce qui peut être très indésirable; si des caractères de glob à un moment donné entrent dans la string
et correspondent ensuite à des fichiers dans le répertoire de travail actuel):
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
Surprise!!
(ZSH n'est pas conforme à POSIX donc ne fait pas la séparation automatique non cotée des variables ni le glob automatique (par défaut), Dieu merci.)