Vous devez utiliser à la printf
place deecho
:
printf "%s\n" "${mtches[@]}"
Si mtches
est vide, cela produira toujours une ligne vide. Pour en tenir compte:
{ [ "${#mtches[@]}" -eq 0 ] || printf '%s\n' "${mtches[@]}"; } > file
Dans bash
(et également les shells POSIX), vous utilisez souvent le tableau de paramètres de position au "$@"
lieu de "$*"
, sauf si vous avez une raison particulière. Cela est également vrai dans les shells qui prennent en charge les tableaux réguliers, à partir de man bash - section Arrays :
Tout élément d'un tableau peut être référencé à l'aide de $ {name [indice]}. Les accolades sont nécessaires pour éviter les conflits avec les opérateurs d'extension de nom de fichier du shell. Si l'indice est «@» ou «*», le mot s'étend à tous les membres du nom du tableau. Ces indices ne diffèrent que lorsque le mot apparaît entre guillemets doubles. Si le mot est entre guillemets, $ {name [*]} se développe en un seul mot avec la valeur de chaque membre du tableau séparé par le premier caractère de la variable IFS, et $ {name [@]} développe chaque élément de nom à un mot distinct. Lorsqu'il n'y a pas de membres du tableau, $ {name [@]} se développe à rien. Si l'expansion entre guillemets se produit dans un mot, l'expansion du premier paramètre est jointe à la partie de début du mot d'origine et l'expansion du dernier paramètre est jointe à la dernière partie du mot d'origine.
Utilisez uniquement "${array[*]}"
lorsque vous souhaitez joindre tous les éléments du tableau à une chaîne.
Vous souhaitez utiliser à la
${mtches[*]}
place.Lorsque vous utilisez
"${mtches[@]}"
, peu importe la valeur de$IFS
, bash divisera le tableau en plusieurs arguments. Ce que vous voulez, c'est un seul argument avec chaque élément de tableau joint par\n
.${mtches[*]}
accomplit cela.Également comme moyen de configuration temporaire
$IFS
, vous pouvez faire:Ensuite, vous n'avez pas à vous soucier de le remettre en place.
la source
printf
...Utilisation pour :
Utiliser l' histoire ; notez que cela échouera si vos valeurs contiennent
!
:Utilisation du nom de base ; notez que cela échouera si vos valeurs contiennent
/
:Utilisation de shuf ; notez que les résultats peuvent ne pas sortir dans l'ordre:
la source
Agréable et lisible et ne signifie pas jouer avec IFS. Cela signifie également que vous pouvez personnaliser la gestion de chaque ligne.
la source
echo
ce qui ne peut pas être utilisé pour du contenu arbitraire et avez oublié de citer vos variables . Une version légèrement meilleure a déjà été publiée par StevenPenny