web-dev-qa-db-ja.com

bashのPerlコマンドでbash変数を使用する

ファイルを編集するには、変数をbashスクリプトからsqlplusを介してPerlステートメントに渡す必要があります。 count変数を渡さなくても正常に機能しますが、渡すときに問題が発生します。

count=$( sqlplus -s test/test <<-EOF
    set pagesize 0;
    set feedback off;
    set verify off;
    set heading off echo off;
        select count(*) from test;
    exit;
EOF)

if [ "$count" != "" ] && [ $count != "0" ]; then

    Perl -lpe 'print "Total Number of Rejected Files = "$count"" if $. == 10' Results.txt >> data.txt

else

fi

私の知る限り、この部分だけの私の問題"$count"。私は多くのことを試しました:

Perl -lpe 'print "Total Number of Rejected Files = $ENV{'count'}" if $. == 10' Results.txt >> data.txt

この :

Perl -lpe 'print "Total Number of Rejected Files = $ENV{count}" if $. == 10' Results.txt >> data.txt

しかし問題は、bash変数がPerlステートメントを通じて展開されないことです。

2
Nikolan Asad

$ENVのアプローチは問題なく機能します。最初にシェル変数をエクスポートする必要があります。 Perlスクリプトはサブシェルで実行されているため、変数を表示する唯一の方法は、最初に変数をエクスポートすることです。

count=$( sqlplus -s test/test <<-EOF
    set pagesize 0;
    set feedback off;
    set verify off;
    set heading off echo off;
        select count(*) from test;
    exit;
EOF)

export count

if [ "$count" != "" ] && [ $count != "0" ]; then
    Perl -lpe 'print "Total Number of Rejected Files = $ENV{count}" if $. == 10' Results.txt >> data.txt
fi

私はあなたのPerlコマンドについて少し混乱しています。 Perl -lpe '' Results.txtは、「-e」で指定されたスクリプトを適用した後、Results.txtの各行を印刷します。ただし、実際にはResults.txtに対して何も実行していないので、何が重要なのでしょうか。

コードは単にResults.txtのすべての行を出力し、10行目にはTotal Number of Rejected Files =$countの値も出力します。それが本当にあなたがやりたいことなら、それは素晴らしいことです。あなたが実際にこれを望んでいる可能性は非常に低いようです。

6
terdon