env, setenv, 내보내기 및 사용 시기의 차이점은 무엇입니까?

env, setenv, 내보내기 및 사용 시기의 차이점은 무엇입니까?

최근에 환경 변수를 설정하는 데 세 가지 옵션이 있다는 것을 알았습니다.

  1. export envVar1=1
  2. setenv envVar2=2
  3. env envVAr3=3

다른 방법이 있으면 알려주시기 바랍니다.

언제 다른 것보다 하나를 선택해야 합니까? 가이드라인을 제안해주세요.

쉘 호환성과 관련하여 어느 것이 가장 광범위합니까(더 많은 쉘 방언을 포함)?

나는 이것을 알아 차렸다답변env하지만 저는 선호도 가이드를 사용하여 이 질문을 확장하고 싶습니다 .

답변1

export VARIABLE_NAME='some value'shPOSIX 호환 셸( , dash, 등 bash, zsh) ksh에서 환경 변수를 설정하는 방법 입니다. 변수에 이미 값이 있으면 export VARIABLE_NAME값을 변경하지 않고 환경 변수로 만들 수 있습니다.

POSIX 이전 버전본 껍질이는 지원되지 않으므로 export VARIABLE_NAME='some value'대신 사용하지 않고 사용하는 스크립트가 표시됩니다 VARIABLE_NAME='some value'; export VARIABLE_NAME. 그러나 POSIX 이전 Bourne 쉘은 오늘날 극히 드뭅니다.

setenv VARIABLE_NAME='some value'환경 변수 설정을 위한 csh 구문입니다. setenvsh에는 존재하지 않으며 csh는 스크립트에서 거의 사용되지 않으며 지난 20년 동안(zsh는 더 오랫동안) 대화형 사용에서 bash를 능가했기 때문에 마주치지 않는 한 잊어버릴 수 있습니다.

env명령은 다음을 제외하고는 거의 유용하지 않습니다.셰르본 라인. 인수 없이 호출하면 환경을 표시하지만 export더 좋습니다(값의 줄바꿈과 값을 구분하는 줄바꿈을 명확하게 하기 위해 정렬되고 종종 인용됩니다). 인수를 사용하여 호출하면 추가 환경 변수를 사용하여 명령을 실행하지만 env동일한 명령 없이도 작동합니다( VAR=value mycommand예: set to로 실행). Shebang 라인이 유용한 이유는 조회를 수행하고 명령 이름으로 호출될 때 다른 작업을 수행하지 않기 때문입니다. 이 명령은 쉘이 가져오지 않는 유효하지 않은 이름을 가진 변수를 포함하여 환경을 표시하기 위해 몇 가지 환경 변수(인수 포함 또는 제외)만 포함된 명령을 실행하는 데 사용할 수 있습니다.mycommandVARvalueenv VAR=value mycommandenvPATHenv-i

답변2

환경 변수와 같은 변수를 수정하지 않고 설정한다는 것은 VAR='asdf'동일한 세션에서 시작한 프로그램이 이에 대해 아무것도 모르고 VAR액세스할 수 없음을 의미합니다. 쉘 스크립트를 작성할 때 이 동작을 원합니다.

export반면에 내보낸 변수가 현재 세션에서 생성된 하위 프로세스에 표시되도록 환경을 수정하는 bash 내장 명령입니다. 를 실행하여 동일한 결과를 얻을 수 있습니다 VAR='asdf' %program_name%.

env내장된 프로그램은 아니고 별도의 프로그램입니다. 표면적으로는 여러분과 똑같이 작동 VAR='asdf' %program_name%하지만, 낮은 수준에서는 상황이 더 복잡해집니다. 먼저, env시작하세요. 환경을 수정한 다음 지정된 매개변수를 사용하여 명령을 실행합니다. 다음을 사용하여 자신의 코드에서 동일한 동작을 달성할 수 있습니다.실행(3)시스템 호출.

setenvexport답변에서 알 수 있듯이 csh-family 쉘에서만 가능합니다.

답변3

관련 정보