Salut j’essaie de lire plusieurs lignes de quelques fichiers dans le dossier “posts” un fichier html dans les dossiers de dossier pourrait ressembler à ceci:
stackoverflow
14.12.11
Blbalbla some text here.
C’est le code jusqu’à présent …
cd posts for f in * do aname=$(echo "$f" | sed 's/\(.*\)\..*/\1/') headline="$(sed -n 1p $f)
" postdate="$(sed -n 2p $f)
" article="$headline $postdate $(sed -n '4,$p' $f)" echo "$article" done cd .. echo "$article"
Le problème est que le premier écho de la ligne 8 ne montre pas le même contenu que l’écho de la dernière ligne… mais les chaînes trop doivent avoir la même valeur / je veux que la chaîne ait la même valeur dans la dernière ligne comme il était dans la ligne 8 …
Pour la postérité: cette réponse ne résolvait pas exactement la question de l’affiche originale, il devait y avoir des problèmes environnementaux au travail.
Parce que l’
article
est uniquement défini dans la bouclefor
, il n’est pas défini aprèsdone
…Vous pouvez simplement lancer une ligne contenant:
article=
(rien après=
) avant le début de la bouclefor
pour amener la variable en dehors de la scope.Fondamentalement, tout ce qui est “créé” à l’intérieur de la boucle ne dure que jusqu’à la fermeture de la boucle.
( http://en.wikipedia.org/wiki/Scope_%28computer_science%29#Lexical_scoping pour plus que vous ne voulez savoir sur la scope lexicale et les amis.)
Dans l’intérêt des futurs lecteurs qui pourraient avoir un problème similaire:
→ Ceci est incorrect dans bash
, do/done
ne crée pas de scope lexicale à moins que ()
soit utilisé. Cependant, il semble être correct pour certaines versions ou parameters de zsh
(selon les commentaires de suivi de l’affiche originale); mais sur la configuration par défaut de Fedora 15 de zsh
, il suit le comportement ci-dessous, tout comme bash
(la scope n’est pas nestede sans le ()
)
for x in 1 2 3; do n="$x foo" echo -n "$n," done echo "($n)"
→ 1 foo,2 foo,3 foo,(3 foo)
for x in 1 2 3; do ( n="$x foo" echo -n "$n," ); done echo "($n)"
→ 1 foo,2 foo,3 foo,()
Je ne sais pas ce qui aurait pu causer le problème qui a provoqué ce problème, je suis content que ce soit parti …