대시를 포함하는 환경 변수 설정

대시를 포함하는 환경 변수 설정

여러 게시물을 읽었는데 Centos 7.5에서 특수 문자가 포함된 변수를 내보낼 수 없는 것 같습니다(특수 문자가 문제라고 생각합니다. 다른 문제인 경우 수정해 주세요). 명령은 를 export TEST-ME=blah반환합니다 -bash: export: TEST-ME=blah: not a valid identifier. 백슬래시와 작은따옴표와 큰따옴표의 여러 변형을 사용하여 이스케이프를 시도했지만 결과는 동일합니다. 내가 뭘 잘못했나요?

답변1

하지만환경변수는 NUL을 제외하고 모든 문자 또는 비문자를 포함할 수 있으며 =POSIX export쉘의 특수 내장 함수는껍데기환경에 따라 변화합니다.

대부분의 Bourne형 쉘에서 쉘 변수는 알파벳 문자(보통 POSIX 이식 가능한 문자 세트의 문자로 제한됨) 또는 밑줄로 시작해야 하며 그 뒤에 영숫자 문자(또는 밑줄)가 와야 합니다. -일반적으로 영숫자 문자로 분류되지 않습니다.

해당 환경에 전달된 명령을 실행하려면 TEST-ME=blah다음을 수행할 수 있습니다.

env TEST-ME=blah a-command

rc파생 클래스는 쉘 변수에 모든 문자를 포함할 수 있으며 쉘 변수는 쉘에서 실행되는 명령 환경으로 자동으로 내보내집니다.

그러나 Byron Rakitzis의 변형(현재 오픈 소스인 Plan9/Unix V10의 원래 변형과 반대)을 사용하면 숫자와 밑줄 이외의 이식 가능한 문자 집합의 문자가 바이트 값인 16 _xx진수 로 인코딩됩니다. xx문자.

따라서 을 사용하면 rc다음을 수행할 수 있습니다.

TEST-ME = blah; my-command

rc그러나 구현 에 따라 쉘에서 받은 환경을 my-commandTEST-ME=blah거나 환경에 있습니다.TEST__2dME=blah

어떤 경우든, 이식 가능한 문자 집합에 숫자 이외의 문자가 포함된(또는 숫자로 시작하거나 비어 있는) 환경 변수 이름을 사용하는 것은 mksh일부 쉘을 포함하는 여러 애플리케이션의 경우와 마찬가지로 좋지 않은 생각입니다(예: 다음에서 삭제됨 ). 수입.

예를 들어,

env TEST-ME=blah mksh -c 'printenv TEST-ME'

아무것도 반환하지 않습니다.

다른 셸과 마찬가지로 해당 환경에 전달된 셸을 언제든지 다시 실행할 수 있습니다 TEST-ME=blah. 쉘은 이러한 환경 변수를 쉘 변수에 매핑하지 않지만 일부는 여전히 실행하는 명령에 이를 전달합니다. 그래서:

exec env TEST-ME=blah /proc/self/exe

예를 들어 TEST-ME=blah환경에 추가된 메서드가 될 수 있습니다.

관련 정보