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 du script - sh <scriptname>
contre bash <scriptname>
et aussi cette chose que je ne peux pas nommer pour le moment - #!/bin/sh
et #!/bin/bash
:)
L'utilisation de tableaux dans bash peut améliorer la lisibilité: cette syntaxe de tableau permet des espaces arbitraires entre les mots.
strings=(
string1
string2
"string with spaces"
stringN
)
for i in "${strings[@]}"; do
echo "$i"
done
Vous pouvez échapper au saut de ligne avec une barre oblique inverse:
$ for i in \
> hello \
> world
> do
> echo $i
> done
hello
world
$
Vous pouvez échapper aux sauts de ligne avant/après chaque élément que vous parcourez:
for i in \
string1 \
string2 \
stringN
do
printf '%s\n' "$i"
done
Ou, pour cet exemple simple:
printf '%s\n' string1 string2 stringN
qui a le même résultat.
En relation:
Variation utilisant un tableau bash
:
strings=(
string1
string2
stringN
)
printf '%s\n' "${strings[@]}"
Si le passage à zsh
est une option:
for string (
string1
'other string'
etc..
) printf '%s\n' "$string"
Même chose, moins de texte:
array=(
string{1..7}
)
for i in "${array[@]}"; do
echo "$i"
done
Vous pouvez utiliser la commande loop
, disponible ici , comme ceci:
$ loop "echo $ITEM" --for string1,string2,string3
ou, si vous avez une liste sous forme de fichier:
$ cat file_list.txt | loop "echo $ITEM"
list='a b c d'
for element in $list;do
echo "$element"
done