En bash, je sais qu'il est possible d'écrire une for
boucle dans laquelle une variable de contrôle de boucle i
itère sur des entiers spécifiés. Par exemple, je peux écrire un script shell bash qui imprime les entiers entre 1 et 10:
#!/bin/bash
for i in {1..10}
do
echo $i
done
Est-il possible d'itérer à la place une variable de contrôle de boucle qui est une chaîne, si je fournis une liste de chaînes? Par exemple, supposons que j'ai une chaîne fname
qui représente un nom de fichier. Je veux appeler un ensemble de commandes pour chaque nom de fichier. Par exemple, je pourrais vouloir imprimer le contenu de l' fname
utilisation d'une commande comme celle-ci:
#!/bin/bash
for fname in {"a.txt", "b.txt", "c.txt"}
do
echo $fname
done
En d'autres termes, à la première itération, fname
devrait avoir la valeur fname="a.txt"
, tandis qu'à la deuxième itération, fname
devrait avoir la valeur fname="b.txt"
, et ainsi de suite. Malheureusement, il semble que la syntaxe ci-dessus ne soit pas tout à fait correcte. Je voudrais obtenir la sortie:
a.txt
b.txt
c.txt
mais quand j'essaye le code ci-dessus, j'obtiens cette sortie:
{a.txt,
b.txt,
c.txt}
Pouvez-vous m'aider à déterminer la syntaxe correcte, afin que je puisse modifier de manière itérative la valeur / le contenu de la variable fname
? Merci pour votre temps.
{}
et le ,
s. L'alternative est de supprimer les espaces. Alors soit "a.txt" "b.txt" "c.txt"
ou {"a.txt","b.txt","c.txt"}
. Mais je préfère {a..c}.txt
plutôt.
{}
, vous n'avez besoin de rien pour parcourir une liste (délimitée par des espaces)