2013-08-29 5 views
0

pouvez-vous s'il vous plaît me dire comment passer la variable cshell à un perl one liner? Je pense que le script pour imprimer AAA mais il finit par me donner une erreur: remplacement de substitution ne se termine pas à la ligne -e 1.comment passer la variable tcsh à perl one-liner

#!/usr/bin/tcsh -fb 

set myvar = "AAA" 
perl -e "print $myvar" 

le cas plus complexe pour mon script.

#!/usr/bin/tcsh -fb 

set myvar = "AAA" 
perl -ne 'if (/$myvar/) {s/m1/m2/g}' fileA 
+0

fait cela est juste une version simplifiée de mon script, je voudrais traiter un fichier d'entrée dit fileA .... mon script est quelque chose comme: perl -ne « if ($/myvar /) {s/m1/m2/g} fileA – user466130

+0

duplication possible de [Comment puis-je transmettre ma variable de boucle Bash à l'interpréteur Perl?] (http://stackoverflow.com/questions/8974493/how-can-i-pass-on -my-bash-loop-variable-à-l'interprète-perl) – Zaid

Répondre

0

Vous pouvez passer myvar comme argument de ligne de commande à votre programme perl.

+0

salut Bill. voir mon commentaire ci-dessus – user466130

+0

Pouvez-vous s'il vous plaît partager du code pour m'aider à comprendre. Pouvez-vous passer le nom de fichier comme argument au script perl? – Bill

+0

#!/Usr/bin/tcsh -fb set myvar = "AAA" perl -ne 'if (/ $ myvar /) {s/m1/m2/g}' – user466130

1

Les variables d'environnement du système hôte sont disponibles dans la variable %ENV de Perl. Mais pour marquer une variable comme héritable, vous devez utiliser setenv intégré de csh au lieu de set.

% setenv myvar AAA 
% perl -e 'print $ENV{myvar}' 
AAA 

(notez les guillemets simples dans l'argument à perl -e)

1

Votre déclaration de perl est print 'AAA', de sorte que vous devez passer la citation unique.

set myvar = "AAA" 
perl -e "print '$myvar'" 

Dans l'autre cas, vous devez utiliser des guillemets doubles pour laisser Perl obtenir la valeur de votre variable.

set myvar = "AAA" 
perl -ne "if (/$myvar/) {s/m1/m2/g}" fileA 
Questions connexes