La chaîne doit avoir la même valeur mais ce n’est pas le cas

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 boucle for , il n’est pas défini après done

Vous pouvez simplement lancer une ligne contenant: article= (rien après = ) avant le début de la boucle for 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 …