bash-builtins 'set'과 'export'는 무엇을합니까?


46

나는 Bash 의 목적 setexportBash에서 약간의 손실을 입었 습니다 (아마도 다른 껍질도 추측합니다).

환경 변수를 설정하기위한 것이라고 생각하지만 VARIABLE=VALUE, 바로 그렇게 할 수 있습니까?

또한 입력 setexport자체적으로 다른 값이 표시됩니다.

그래서 그들의 목적은 무엇입니까?



나는 항상 다음 두 가지로 bash 스크립트로 시작합니다. #! / usr / bin / env bash set -euxo pipefail이 링크는 아름답게 설명되어 있습니다. coderwall.com/p/fkfaqq/…
147.3k 7

답변:


50

export현재 프로세스의 하위로 내보내는 경우 기본적으로 내 보내지 않습니다. 예를 들면 다음과 같습니다.

$ foo=bar
$ echo "$foo"
bar
$ bash -c 'echo "$foo"'

$ export foo
$ bash -c 'echo "$foo"'
bar

set반면에 쉘 속성 (예 : 위치 매개 변수)을 설정합니다.

$ set foo=baz
$ echo "$1"
foo=baz

baz할당되지 않은 foo것은 단순히 리터럴 위치 매개 변수가됩니다. set할 수있는 다른 많은 것들이 있습니다 (주로 쉘 옵션) help set.

인쇄에 관해서는, export인수없이 호출하면 쉘의 환경에서 모든 변수를 인쇄합니다. 내 보내지 않은set 변수도 인쇄합니다 . 또한 다른 객체를 내보낼 수도 있습니다 (이것이 이식 가능하지는 않지만) .help export


매우 유용한 답변입니다. 그러나 http_proxy = abc.com 으로 http_proxy를 설정 하면 자식 프로세스를 볼 수 있습니다 (예 : 내 보내지 않고 wget 실행). 어떻게 이럴 수있어?
mydoghasworms

2
@mydoghasworms 두 가지 가능한 이유. 하나, 당신은 명령을 실행하고 있습니다 foo=bar command. 단일 명령에 대한 암시 적 내보내기입니다. 두 번째 가능성은 http_proxy환경을 수정하기 전에 이미 환경으로 내보내는 것입니다.
Chris Down

아 네 맞아요. 훌륭합니다, 고마워요!
mydoghasworms

6

참조 help set: set은 쉘 속성과 위치 속성을 설정하는 데 사용됩니다.

내 보내지 않은 변수는 자식 프로세스에 의해 상속되지 않습니다. export내보낼 변수를 표시하는 데 사용됩니다.

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