Est-il possible de formater cet exemple:
for i in string1 string2 stringN
do
echo $i
done
à quelque chose de similaire à ceci:
for i in
string1
string2
stringN
do
echo $i
done
EDIT: Désolé pour la confusion, je ne savais pas qu'il y avait différentes méthodes d'exécution de script - sh <scriptname>
versus bash <scriptname>
et aussi cette chose que je ne peux pas nommer pour le moment - #!/bin/sh
et #!/bin/bash
:)
Réponses:
L'utilisation de tableaux dans bash peut faciliter la lisibilité: cette syntaxe de tableau permet des espaces arbitraires entre les mots.
la source
sh
n'est pas nécessairement Bash, et surtout pas sur Debian et Ubuntu.Vous pouvez échapper au saut de ligne avec une barre oblique inverse:
la source
Vous pouvez échapper aux sauts de ligne avant / après chaque élément que vous parcourez:
Ou, pour cet exemple simple:
qui a le même résultat.
En relation:
Variation à l'aide d'un
bash
tableau:la source
Si le passage à
zsh
est une option:la source
Vous pouvez utiliser la
loop
commande, disponible ici , comme ceci:ou, si vous avez une liste sous forme de fichier:
la source
la source
$list
chaîne contient des caractères delist='* * * *'
remplacement de nom de fichier ( ), le shell pourrait potentiellement les remplacer par des noms de fichiers correspondants.Même chose, moins de texte:
la source
string1
etc. ne sont pas les valeurs littérales à afficher, ce sont des espaces réservés, donc cette approche ne fonctionne pas.array ( … )
? fais justefor i in string{1..7}; do echo "$i"; done
; pairprintf '%s\n' string{1..7}