J’ai trouvé ça .
Et j’essaye ceci:
x='some thing' y=(${x//\n/})
Et je n’ai pas eu de chance, je pensais que ça pourrait fonctionner avec une double barre oblique inverse:
y=(${x//\\n/})
Mais ce n’est pas le cas.
Pour tester je ne reçois pas ce que je veux je fais:
echo ${y[1]}
Obtenir:
some thing
Ce que je veux être:
some
Je veux y
être un tableau [some, thing]
. Comment puis-je faire ceci?
Autrement:
x=$'Some\nssortingng' readarray -ty <<<"$x"
Ou, si vous n'avez pas bash 4, l'équivalent bash 3.2:
IFS=$'\n' read -rd '' -ay <<<"$x"
Vous pouvez aussi le faire comme vous essayiez initialement d'utiliser:
y=(${x//$'\n'/ })
Cela, cependant, ne fonctionnera pas correctement si votre chaîne contient déjà des espaces, tels que 'line 1\nline 2'
. Pour que cela fonctionne, vous devez restreindre le séparateur de mots avant de l’parsingr:
IFS=$'\n' y=(${x//$'\n'/ })
... et puis, comme vous modifiez le séparateur, vous n'avez plus besoin de convertir le \n
en space
, vous pouvez donc le simplifier pour:
IFS=$'\n' y=($x)
Cette approche fonctionnera à moins que $x
contienne un motif de globalisation correspondant (tel que " *
") - auquel cas il sera remplacé par le ou les noms de fichiers correspondants. Les méthodes read
/ readarray
nécessitent des versions plus récentes de bash, mais fonctionnent dans tous les cas.