하나의 명령으로 변수를 설정하고 내보내는 대신 변수를 먼저 설정한 다음 내보내는 이유는 무엇입니까?

하나의 명령으로 변수를 설정하고 내보내는 대신 변수를 먼저 설정한 다음 내보내는 이유는 무엇입니까?

실행 되면 gpg-agent셸에서 직접 처리할 수 있는 데이터를 출력합니다. 예를 들면 다음과 같습니다.

SSH_AUTH_SOCK=/tmp/ssh-apeOFqMF3292/agent.3292; export SSH_AUTH_SOCK;
SSH_AGENT_PID=3293; export SSH_AGENT_PID;
echo Agent pid 3293;

왜 이런 일을 하는가 gpg-agent? 나는 더 많은 프로그램이 이것을 수행하는 것을 보았습니다. 이전 쉘에서는 이를 지원하지 않습니까 export var=val? 내장 교체 쉘을 지원하지 않는 쉘은 무엇입니까?

저는 쿠분투에서 bash를 사용하고 있습니다.

답변1

전통적인 Bourne 쉘은 이들을 결합하는 것을 지원하지 않습니다(System V에서는 이를 생략할 수 있지만 ;4.2BSD/SunOS 쉘에서는 그렇지 않습니다). 이는 Korn 쉘( exportBourne 쉘과의 csh크로스 오버 setenv)에 의해 추가되었으며 이후 다른 쉘과 POSIX.2에 채택되었습니다. 많은 상용 Unix는 여전히 Bourne 쉘의 System V 변형을 제공하므로 /bin/sh호환성을 유지하는 것이 이식성을 위한 좋은 생각입니다.

답변2

상수 문자열에서는 작동하지 않지만 이를 두 개의 개별 명령으로 실행하는 습관을 들이는 이유 중 하나는 export FOO=$(mycmd)종료 상태를 가리기 위한 것입니다 mycmd . mycmd실패하더라도 성공을 보고합니다. 바라보다 변수 할당의 반환 상태는 어떻게 결정됩니까? 그리고쉘체크 위키.

관련 정보