2012-03-18 9 views
5

は、私はこのように、いくつかのperlラインを使用したい:

perl -pe "$_=~s///e" 

問題があり、bashは "$ _" 変数を展開し続けています。 perl式を一重引用符で囲むこともできますが、スクリプトに変数を追加することができなくなります。

"$ _"変数を展開する方法が停止していますか?

+2

注意近く:ばかげていないでください。シェルプログラミングの質問は絶対にstackoverflowに属しています。 – tchrist

+1

そこに '$ _'変数を使用する必要はありません。 – TLP

+0

@TLP - これは単なる例でした。実際のスクリプトでは、私は本当にそれが必要でした。 :) – Rogach

答えて

11
perl -pe '$_=~s///e' 

又は

perl -pe "\$_=~s///e" 
1

ミックス・アンド・マッチ。

perl -pe '$_=~s///e; echo "'"$idontknowperl"'"' 

引用セクションが互いに突き合わせる限り、それは単一の引数とみなされます。

+3

さて、Perlコンパイラは、あなたが 'echo'メソッド/関数を呼び出したことに満足できないでしょう。 :) – tchrist

5

第1オフ:$ENV{myvariable}を使用して環境変数にアクセスすることができます。 m//,s///tr///を使用する場合、$_を指定する必要はありません。

また、変数をperlに渡したい場合は、シェル変数をperlコードに補間する以外にも、これを行う方法があります。

perl -we 'my ($var1, $var2, $var3) = @ARGV;' "$MYFOO" "$BAR" "$baz" 

シェル変数に空白が含まれていない場合は、引用符を不要にすることができます。

ここで、-pまたは-nスイッチを使用する場合、その周りにも方法があります。彼らは-p-nスイッチの暗黙のwhileループで使用されていないように、BEGIN文のshiftを使用して

perl -pwe 'BEGIN { my $var1 = shift; my $var2 = shift } #code goes here' 
    "$MYFOO" "$BAR" file1 file2 

@ARGVから変数を削除します。

+1

perlの 'ENV'は、特にシェル変数ではなく、環境変数のためのものです。 –

関連する問題