J'essaie de modifier certains scripts avec une combinaison de bash et de perl. Le problème est que Perl pense que est un moyen de faire $ index code> est sa propre variable, qui n'est jamais définie:
$ index Code> Portez son manteau de bash dans le Perl One-Liner? P> P>
5 Réponses :
Appuyez sur un index d'exportation Alternativement: utilisez les devis doubles ; code> dans la
faire code> boucle. Reportez-vous à
$ env. {Index} code>
dans le corps du programme PERL. P>
"... $ index ..." code> pour interpoler la variable de coque dans l'expression qui constitue le corps du programme PERL. Si vous souhaitez développer cette doublure, prenez soin de vous échapper correctement aux expressions Perl, telles que
$ code> sur des noms de variable, et peut-être les backslashes, donc qui sont interprétées par Perl, pas la coque. p>
C'est le meilleur, fourni i> index code> a été exporté de bash. Vous pouvez le faire avant la boucle ou pendant.
Utilisez " code> au lieu de
' code>. Le bash peut ensuite substituer la variable avant que Perl ne voit. P>
Utilisez des guillemets doubles au lieu de guillemets simples et $ L'indice sera interpolé avant que la chaîne -E ne soit transmise à Perl. P>
Voici un exemple de travail (mais pas dans les termes de votre problème - désolé!):
generatep() { perl -e ' $_stem=$ARGV[0]; $_ctx=$ARGV[1]; $_role=$ARGV[2]; $i=$ARGV[3]; $ct=$i + $ARGV[4]; while ($i < $ct) { print "user=$_stem$i,$_ctx,$_role\n"; $i++; } ' ${stem} ${ctx} ${role} ${startix} ${count} }
N'est-ce pas susceptible d'interférer avec la manipulation -pi code> de Perl?
Ça a bien fonctionné pour moi! Vous n'avez pas besoin d'exporter la variable non plus. Cela fonctionne avec les Vars déclarés localement à l'intérieur de votre script.
C'est-à-dire que cette façon de transmettre Vars à Perl n'affecte pas "-PI". Fonctionne bien. Mon utilisation d'une boucle dans cet exemple peut affecter "-pi" mais, c'est juste un par exemple
Mon commentaire était un indice subtil (aussi?) Que vous n'aviez pas correctement aborder la question ...
Je suppose que le problème ici est que les globs Bash Shell ne soutiennent pas les gammes. Pour une raison quelconque, je pensais qu'ils l'ont fait. Peu importe, Perl prend en charge les gammes juste bien: un peu maladroit, mais c'est toute une langue de toute façon. P> P>
Saviez-vous que le bloc code> code> peut coincé entre le baiser Eskimo :)? : $ perl -e '...} commence {...' code>
@ZAID peut-être, mais cela sacrifie beaucoup de logique pour sauver une tranche bouclée de dactylographie. = P
$ index _ code> est un nom de symbole valide dans Perl et Bash. Peut-être que vous souhaitez utiliser un autre délimiteur pour le
S /// code>?
@MOB: Ouais, j'allais changer cela ... essayait de le rendre plus lisible et aiguisé les choses dans le processus: |
@mob: Les délimiteurs de regex ont changé