我需要通过 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
。如果这确实是您想做的,那就太好了。您实际上不太可能想要这个。