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

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

ファイルを編集するには、sqlplusを介してbashスクリプトの変数を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ステートメントに拡張されないことです。

答え1

あなたの$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「与えられたスクリプトを適用した後、Results.txtの各行を印刷しますが、-e実際にResults.txtに何もしません。

コードは単に各行を印刷してから、10行目の値Results.txtも印刷します。それが本当にあなたがやりたいことなら本当にいいです。実際にこれをしたい場合はほとんどありません。Total Number of Rejected Files =$count

関連情報