在 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方法会很好地工作,您只需要先导出 shell 变量。您的 perl 脚本在子 shell 中运行,因此它看到该变量的唯一方法是先导出它:

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 做任何事情,所以有什么意义呢?

您的代码将简单地打印出 的每一行Results.txt,然后在第 10 行,它还将打印Total Number of Rejected Files =和 的值$count。如果这确实是您想做的,那就太好了。您实际上不太可能想要这个。

相关内容