나는 환경 변수 등을 설정하고 같은 이름의 명령을 호출하기 위해 작은 Perl 래퍼를 작성하고 있습니다.
./foo.pl -a one -b two -c "1 2 3" -d done
@ARGV를 출력하면 1 2 3 주변의 ""가 제거되었습니다. 이 인용문을 유지하기 위해 Perl을 얻는 방법을 아는 사람이 있습니까?
답변1
Perl이 따옴표를 보존하지 않는다는 것이 아니라 단지 Perl이 따옴표를 결코 얻을 수 없다는 것입니다. 따옴표는 쉘이 텍스트를 여러 인수로 분할하는 것을 방지하는 방법일 뿐입니다. 백슬래시를 사용하여 동일한 효과를 얻을 수 있습니다.
./foo.pl -a one -b two -c 1\ 2\ 3 -d done
두 경우 모두 효과는 문자열 1, 공백, 2, 공백, 3입니다. 공백을 포함하지 않는 다른 매개변수 주위에 따옴표를 붙일 수도 있으며, 따옴표는 여전히 프로그램에 전달되는 매개변수의 일부가 아닙니다.
셸에 인수를 전달하려면 모든 인수를 따옴표로 묶으면 됩니다. 또는 각 특수 쉘 문자 앞에 백슬래시를 추가할 수 있습니다.
답변2
간단하게 큰 따옴표를 추가하세요.
./foo.pl -a one -b two -c '"1 2 3"' -d done