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

관련 정보