내 말이 맞다면 프로세스 환경은 문자열 배열입니다. 문자열은 일반적으로 "name=value" 형식을 가지지만 반드시 그런 것은 아닙니다. "이름=값" 형식이 아닌 문자열의 목적이 무엇인지 궁금합니다. 감사해요.
답변1
나는 그것을 포함하지 않을 실제 사용이나 기대를 알지 못합니다 =
. 이는 일반적으로 병리학적인 경우입니다.
GNU는 env
아마도 printenv
그것들을 충실하게 인쇄할 것입니다.
일부 언어의 경우 이러한 문자열을 사용할 수 없습니다. 예를 들어, env 문자열을 perl
사용 하여 호출하면 foo
해당 문자열은 표시되지 않지만 keys(%ENV)
실행 perl
하는 명령에는 계속 전달됩니다(전체 %ENV
해시를 재설정하지 않는 한).
따라서 이를 사용하여 일부 환경 정리를 우회할 수 있습니다(물론 적절한 환경 정리는 빈 환경에서 시작해야 함).
일부 도구(예: 일부 셸)는 수신하는 환경에서 이를 제거하고 실행하는 명령에 전달하지 않으므로 일반적으로 이에 의존하는 것은 좋은 생각이 아닙니다.
-less env 문자열 외에도 =
다른 병리학적 사례에는 중복된 변수 이름(예: Both foo=good
및 foo=bad
전달됨 envp
)이 있는 env 문자열이 포함되며, 이는 취약점으로 이어지는 것으로 나타났습니다(예:CVE-2016-2381) 및 =foo
(빈 변수 이름; POSIX putenv()
/ 는 getenv()
이 변수를 설정/가져올 수 있지만 setenv()
)과 같은 env 문자열입니다.