local::lib 쉘 코드가 eval 및 $()를 사용하는 이유

local::lib 쉘 코드가 eval 및 $()를 사용하는 이유

사용로컬::lib줄을 추가하라는 메시지가 표시됩니다.~/.shellrc

eval $(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)

eval를 사용 하고 그 안에 진술을 포함시키는 요점이 무엇인지 이해하지 못합니다 $(). 나는 또한 이것을 csh사용할 필요가 없다는 것을 알았습니다. 그럼 차이점이 무엇인지, 범용 본쉘에 사용해야하는지, zsh.

답변1

perl -I$HOME/perl5/lib/perl5 -Mlocal::lib일부 쉘 코드를 인쇄하십시오. 요점 eval $(…)은 현재 셸의 컨텍스트에서 코드를 실행하는 것입니다. 이는 일반적으로 환경 변수를 설정하는 데 사용됩니다. 하위 프로세스의 환경에만 영향을 미치므로 이를 위해 하위 프로세스를 사용할 수 없습니다. 조각을 얻을 수 있습니다:

. /path/to/snippet-containing-variable-definitions

그러나 이는 변수 값을 생성하는 코드가 셸에 작성된 경우에만 작동합니다. 여기의 코드는 Perl로 작성되었으므로 Perl 코드는 쉘 코드를 생성합니다.

어두운 색다른 많은 프로그램과 동일한 기술을 사용합니다.

쉘 조각은 일반적으로 매우 간단하며 변수 할당(일반 값 문자열) 및 export명령문이므로 모든 Bourne 스타일 쉘(POSIX 쉘 포함) 및 zsh와 호환됩니다. 이는 할당(POSIX에서는 허용되지만 원래 Bourne 쉘에서는 허용되지 않음)과 결합되므로 local::lib일부 10년 된 시스템과 호환되지 않습니다. Csh에는 다른 구문이 필요합니다. local::lib는 하위 문자열로 포함된 export경우 csh 구문을 내보냅니다 . Windows에서는 cmd에 해당 구문이 없으므로 local::lib는 동일한 cmd 구문을 생성합니다.$SHELLcsh

관련 정보