![대시를 포함하는 환경 변수 설정](https://linux55.com/image/186261/%EB%8C%80%EC%8B%9C%EB%A5%BC%20%ED%8F%AC%ED%95%A8%ED%95%98%EB%8A%94%20%ED%99%98%EA%B2%BD%20%EB%B3%80%EC%88%98%20%EC%84%A4%EC%A0%95.png)
여러 게시물을 읽었는데 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-command
얻 TEST-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
환경에 추가된 메서드가 될 수 있습니다.