Comment parcourir chaîne de caractères, un mot à la fois dans zsh
Comment puis-je modifier le code suivant, de sorte que lorsque vous exécutez dans zsh il développe $things
et parcourt une à une?
things="one two"
for one_thing in $things; do
echo $one_thing
done
Je veux la sortie:
one
two
Mais comme écrit plus haut, c'sorties:
one two
(Je suis à la recherche pour le comportement que vous obtenez lors de l'exécution du code ci-dessus dans un bash)
Est-ce à dire que
zsh
n'est pas le mot de fractionnement $things
quand il s'agit de la liste de for
boucle? Est-il entrer dans le corps de la boucle juste une fois? La réponse, après les combats à travers le script de configuration est "Oui". Scratch zsh
à partir de la liste de utilisable de coquillages; c'est juste trop non-POSIX-shell comme. Je ne peux même pas être pris la peine de commencer à penser à comment il pourrait être configurable pour fonctionner "normalement".OriginalL'auteur Rob Bednark | 2014-04-18
Vous devez vous connecter pour publier un commentaire.
Afin de voir le comportement compatible avec le Bourne shell, vous devez définir l'option
SH_WORD_SPLIT
:donnerait:
Toutefois, il est recommandé d'utiliser un tableau pour la production de couper un mot, par exemple,
Vous pouvez également vous reporter à:
3.1: Pourquoi ne $var où var="foo bar" de ne pas faire ce que j'attends?
shwordsplit
à l'échelle mondiale, vous pouvez activersh
de style, de couper un mot (à l'aide deIFS
, bien sûr) pour un seul paramètre avec${=things}
.a quoi cela ressemble? J'ai essayé
IFS=' '; for one_thing in ${=things}; do
mais j'ai reçu unbad substitution
erreurPourquoi ne pas utiliser un tableau?
Il faut juste être
for one_thing in ${=things}; do
. Quelle est la version dezsh
utilisez-vous? Fonctionne pour moi en 4.3.10. Le tableau est une meilleure idée, cependant, puisque vous n'avez pas à compter sur l'aide d'un délimiteur de chaîne qui n'est pas présente dans tous les éléments individuels.J'utilise zsh 5.0.2 (x86_64-apple-darwin13.0)
OriginalL'auteur devnull
Vous pouvez utiliser le
z
extension variable de drapeau à faire couper un mot sur une variableLire plus à ce sujet et d'autres variables drapeaux dans
man zshexpn
, sous "Paramètre d'Expansion des Drapeaux".OriginalL'auteur Kevin
Vous pouvez supposer que le Champ Interne Séparateur (IFS) sur bash \x20 (de l'espace). De ce fait les travaux suivants:
Avec cela à l'esprit, vous pouvez mettre en œuvre de différentes manières juste de la manipulation de la FI; même sur plusieurs lignes de cordes.
OriginalL'auteur Atttacat