我需要通过 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
Run Code Online (Sandbox Code Playgroud)
据我所知,我的问题只有这部分"$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 语句扩展。
你的$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
Run Code Online (Sandbox Code Playgroud)
不过,我对您的 perl 命令有点困惑。perl -lpe '' Results.txt意思是“在应用给-e它的脚本后打印 Results.txt 的每一行。但你实际上并没有对 Results.txt 做任何事情,那么有什么意义呢?
您的代码将简单地打印出 的每一行,Results.txt然后在第 10 行,它还将打印Total Number of Rejected Files =和 的值$count。如果这真的是你想做的,那就太好了。你实际上想要这个似乎不太可能。