En bash, je sais qu'il est possible d'écrire une forboucle dans laquelle une variable de contrôle de boucle iitè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 fnamequi 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' fnameutilisation 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, fnamedevrait avoir la valeur fname="a.txt", tandis qu'à la deuxième itération, fnamedevrait 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}.txtplutôt.
{}, vous n'avez besoin de rien pour parcourir une liste (délimitée par des espaces)