J'essaie de faire un script bash qui extrait des informations à partir de documents pdf. le premier argument doit être une expression régulière ou le nom d'un fichier. Es:
$ autobib shrek2001.pdf
$ autobib *.pdf
Mon idée est de générer une liste de fichiers correspondant à l'expression régulière et d'en extraire des informations. Mon code en ce moment ressemble à ceci:
for article in $(ls $1);do
pdfinfo $article
done
Mais ce faisant, la boucle s'arrête au premier fichier. Comment puis-je parcourir tous les fichiers correspondant à mon expression régulière?
clpgr a tout à fait raison. Modifiez votre programme pour qu'il ressemble à ceci:
for article in "$@" ;do
pdfinfo $article
done
La raison pour laquelle votre programme ne fait que le premier fichier est que la commande shell est globulée. Autrement dit, lorsque vous exécutez la commande autobib *.pdf
, vous émettez vraiment cette commande: autobib 1.pdf 2.pdf 3.pdf
(eh bien, je crée des noms de fichiers car je ne sais pas ce qu'il y a dans le répertoire. Mais le fait est que votre programme aura 1 $ défini sur 1.pdf donc vous exécuterez ce code $( ls 1.pdf )
qui ne retournerait que 1.pdf.
La vérité est, votre programme peut avoir travaillé ( en fonction des noms de fichiers dans le répertoire) si vous avez exécuté cette façon: autobib "*.pdf"
. Dans cet exemple, le "* .pdf" n'est pas englobé par le shell car il est cité. Maintenant, la variable $ 1 de votre programme aura la valeur *.pdf
.
Cela dit, "$@"
c'est tellement mieux que $( ls $1 )
. "$@"
conservera en fait des espaces dans les arguments.
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots