![Bash의 Perl 명령에서 bash 변수 사용](https://linux55.com/image/171495/Bash%EC%9D%98%20Perl%20%EB%AA%85%EB%A0%B9%EC%97%90%EC%84%9C%20bash%20%EB%B3%80%EC%88%98%20%EC%82%AC%EC%9A%A9.png)
파일을 편집하려면 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