-
쉘에서는 변수를 사용할 수 없습니다 . 다음과 같이 명명된 변수에 의존하는 스크립트가 있으므로 이를 사용할 수 있는 방법이 있습니까?
$export a-b=c
-bash: export: `a-b=c': not a valid identifier
$export a_b=c
첫 번째는 주어진 오류를 발생시키고 두 번째는 정상적으로 작동합니다.
답변1
-
나는 변수 이름 입력을 허용하는 Bourne 스타일 쉘을 본 적이 없습니다. ASCII 문자(대소문자 상관없음) _
와 숫자만 지원되며, 첫 번째 문자는 숫자가 될 수 없습니다.
프로그램에 쉘 제한 사항과 일치하지 않는 환경 변수가 필요한 경우 env
이 프로그램으로 시작하십시오.
env 'strange-name=some value' myprogram
일부 쉘(예:현대 대시, mksh, zsh) 환경에서 싫어하는 이름을 가진 변수를 제거합니다. (쉘 쇼크사람들이 환경 변수 이름에 대해 더 주의를 기울이게 되므로 시간이 지남에 따라 제한이 느슨해지기보다는 더 엄격해질 수 있습니다. ) 따라서 이름에 특수 문자가 포함된 변수를 프로그램에 전달해야 하는 경우 사이에 쉘 없이 직접 전달하십시오( env 'strange-name=some value' sh -c'…; myprogram'
작동할 수도 있고 작동하지 않을 수도 있음).
답변2
간접 참조를 사용하여 하이픈으로 연결된 변수에 액세스할 수 있습니다.
$ env 'my-hyphenated-variable=hello' /bin/bash
$ name='my-hyphenated-variable'
$ echo ${!name}
hello
답변3
Bash에서는 불가능합니다.
~에서정의매뉴얼 페이지의 섹션 bash
:
이름은 영숫자와 밑줄로만 구성된 단어로, 영숫자 또는 밑줄로 시작됩니다. 식별자라고도 합니다.
~에서매개변수매뉴얼 페이지의 섹션 bash
:
매개변수는 값을 저장하는 엔터티입니다. 이름, 숫자 또는 아래 특수 매개변수에 나열된 특수 문자 중 하나일 수 있습니다. 변수는 이름으로 표시되는 매개변수입니다.
답변4
대시( -
) 문자는 개행 문자이며 변수 이름의 일부로 허용되지 않습니다. 인용된 변수를 사용하여 이를 해킹할 수 있는 방법이 있지만 구문 분석은 정말 문제가 많습니다. bash 변수 이름과 관련하여 특별한 의미를 갖는 다른 문자, 특히 중괄호, 괄호, 연산자 문자 및 따옴표가 있습니다. (예를 들어 {}()=+-&'"
등)
실제로 스크립트를 작성하려면 다른 패러다임을 찾아야 한다고 제안합니다. 다른 언어에서 "변수 변수 이름"이라는 개념에 대해 약간의 의구심이 있을 수 있습니다. 이는 일반적으로 쉘 스크립트에서는 좋은 생각이 아닙니다.
이 내용을 편집하거나 상황 및 달성하려는 작업에 대한 세부정보가 포함된 새로운 질문을 하면 스크립트를 작성하는 좋은 방법을 제안할 수 있습니다.