bash에서“a = b”와“export a = b”의 차이점


50

차이점은 무엇입니까?

a=b

export a=b

bash에서?

둘 다 환경 변수를 정의한다는 것을 이해하지만 차이점을 완전히 이해하지 못합니다.


누군가 이것을 편집 해 주시겠습니까? 이것은 전혀 Linux와 관련이 없지만 사용중인 쉘에만 의존합니다. 나는 그것이 bash라고 생각한다. 그것은 Windows에서도 작동한다.
innaM

나는 정정되었다.
Adam Matan

답변:


54

export 변수를 서브 프로세스로 전파합니다.

예를 들어

FOO=bar

FOO를 확인한 하위 프로세스는 변수를 찾지 못합니다.

export FOO=bar

하위 프로세스에서 찾을 수 있습니다.

하지만 FOO이미 환경 변수로 정의 된 후 FOO=bar해당 환경 변수의 값을 수정합니다.

예를 들면 다음과 같습니다.

FOO=one     # Not an environment variable
export FOO  # Now FOO is an environment variable
FOO=two     # Update the environment variable, so sub processes will see $FOO = "two"

오래된 쉘은 export FOO=bar구문을 지원하지 않았습니다 . 당신은 작성해야했습니다 FOO=bar; export FOO.


33
실제로 " export"를 사용하지 않으면 환경 변수를 정의하는 것이 아니라 쉘 변수 만 정의하는 것입니다. 쉘 변수는 쉘 프로세스에서만 사용 가능합니다. 환경 변수는 쉘뿐만 아니라 모든 후속 프로세스에서 사용할 수 있습니다 . 또한 서브 쉘은 괄호 안에 포함 된 명령으로, 쉘 변수에 액세스 할 수있는 반면, 쉘은 자식 프로세스입니다.
wfaulk

이것들은 어디에 저장됩니까?
HDave

28

를 사용하지 않으면 export환경 변수를 정의 하지 않은 것입니다 . 쉘 변수입니다.

쉘 변수는 쉘 프로세스에서만 사용 가능합니다. 환경 변수는 쉘뿐만 아니라 모든 후속 프로세스에서 사용할 수 있습니다.


2

또한 내보내기를 사용하지 않고 호출 쉘에서 변수를 사용할 수있게하려면 다음을 수행하십시오.

파일 a.ksh는-

#!/bin/ksh
FOO=bar

프롬프트에서 다음을 실행하십시오.

> . a.ksh

이것은 동일한 쉘 내에서 명령을 실행하고 $ FOO를 사용할 수 있습니다.

그런데, ...한데,

> a.ksh

a.ksh에 대한 호출이 없으면 a.ksh 내에서만 $ FOO를 사용할 수 있습니다.


1
옳은. "." 가독성을 높이기 위해 스크립트에서 사용되는 "소스"의 바로 가기입니다. "도움말"을 참조하십시오. 자세한 내용은 "도움말 소스"를 참조하십시오.
sleske

1

이미 답변 된 것 외에도,이 두 문장은 반드시 환경 변수를 "a"로 정의 (즉, 작성 대 설정) 할 필요는 없습니다. 이미 쉘 또는 환경 변수로 존재할 수 있습니다.

후자의 경우 두 진술은 완전히 동일합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.