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

최근에 환경 변수를 설정하는 세 가지 옵션이 있음을 확인했습니다.

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

다른 방법이 있으면 알려주십시오.

언제 다른 방법을 선호해야합니까? 가이드 라인을 제안 해주세요.

가장 광범위한 (더 많은 쉘 방언 포함) 쉘 호환성에 관해서는 무엇입니까?

이미 answer 하지만 env 및 사용 환경 설정 가이드 라인으로 질문을 확장하고 싶습니다.

Answer

export VARIABLE_NAME="some value"는 POSIX 호환 셸 (sh, dash, bash, ksh 등; 또한 zsh). 변수에 이미 값이있는 경우 export VARIABLE_NAME를 사용하여 값을 변경하지 않고 환경 변수로 만들 수 있습니다.

Pre-POSIX Bourne shells 는이를 지원하지 않았기 때문에”export VARIABLE_NAME="some value"를 피하고 VARIABLE_NAME="some value"; export VARIABLE_NAME 대신.하지만 POSIX 이전 Bourne 쉘은 오늘날 매우 드뭅니다.

setenv VARIABLE_NAME="some value"는 환경 변수를 설정하는 csh 구문입니다. setenv는 sh에 존재하지 않으며 csh는 스크립트에서 극히 드물게 사용되며 지난 20 년 동안 대화식 사용을 위해 bash (그리고 더 이상 zsh)를 능가했습니다.

env 명령은 shebang 라인 을 제외하고는 거의 유용하지 않습니다. 인수없이 호출하면 환경이 표시되지만 export가 더 잘 수행합니다 (정렬되고 종종 disambigua로 인용 됨). 값을 구분하는 개행에서 값의 개행). 인수를 사용하여 호출하면 추가 환경 변수가있는 명령을 실행하지만 env가없는 동일한 명령도 작동합니다 (VAR=value mycommand는 iv id를 실행합니다. env VAR=value mycommandVAR가 value로 설정된 = “89bd68d2e8″>

>). shebang 라인에서 env가 유용한 이유는 PATH 조회를 수행하고 명령으로 호출 할 때 다른 작업을 수행하지 않기 때문입니다. 이름. env 명령은 -i가있는 몇 개의 환경 변수만으로 명령을 실행하거나 변수를 포함한 환경을 표시하는 매개 변수없이 명령을 실행하는 데 유용 할 수 있습니다. 셸이 가져 오지 않는 잘못된 이름이 있습니다.

답변

VAR="asdf" 환경은 수정되지 않은 상태로 둡니다. 즉, 동일한 세션에서 실행하는 프로그램은 VAR에 대해 전혀 알지 못하며 액세스 할 수 없습니다. 쉘 스크립트를 작성할 때이 동작을 원합니다. .

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

env는 기본 제공이 아니라 프로그램 자체입니다. VAR="asdf" %program_name%, 그러나 하위 수준에서는 상황이 조금 더 복잡해집니다. 먼저 env가 시작됩니다. 환경을 수정 한 다음 주어진 인수로 명령을 실행합니다. exec (3) 시스템 호출을 사용하여 자체 코드에서 달성 할 수있는 것과 동일한 동작입니다.

setenv는 귀하의 답변에 명시된 바와 같이 csh-family 쉘의 export입니다.

댓글

  • 최신 셸에서 VAR=asdfVAR가 이미 환경에있는 경우 환경을 업데이트합니다. (원래 Bourne 셸에서는 ' 참이 아닙니다.)

답변

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다