Computer >> 컴퓨터 >  >> 프로그램 작성 >> BASH 프로그래밍

Bash에서 변수 사용

컴퓨터 과학(및 일반 컴퓨팅)에서 변수는 나중에 사용할 수 있도록 임의의 정보를 보유하는 메모리의 위치입니다. 즉, 데이터를 넣고 빼는 임시 저장 컨테이너입니다. Bash 셸에서 해당 데이터는 단어(문자열 , 컴퓨터 용어) 또는 숫자(정수 ).

이전에 컴퓨터에서 변수를 (고의적으로) 사용한 적이 없을 수도 있지만 아마도 다른 영역에서 변수를 사용한 적이 있을 것입니다. "give me that" 또는 "look at this"와 같은 말은 문법적 변수를 사용하는 것입니다(이를 대명사 ), "이것"과 "저것"의 의미는 여러분이 마음속으로 무엇을 상상하고 있는지, 또는 무엇을 가리키고 있는지에 따라 청중이 여러분이 무엇을 말하는지 알 수 있기 때문입니다. 수학을 할 때 변수라고 부르지 않더라도 변수를 사용하여 알 수 없는 값을 대신합니다.

다음은 매일 사용한다는 사실을 깨닫지 못할 수도 있는 Bash 변수에 대한 빠르고 쉬운 데모입니다. PS1 변수는 터미널 프롬프트를 표시하는 방법에 대한 정보를 보유합니다. 예를 들어 퍼센트 기호(% )—PS1 재정의 변수:

$ PS1="% "
%

이 기사에서는 Linux, BSD, Mac 또는 Cygwin에서 실행되는 Bash 셸의 변수를 다룹니다. Microsoft의 오픈 소스 PowerShell 사용자는 PowerShell의 변수에 대한 내 기사를 참조해야 합니다.

변수란 무엇입니까?

Bash에서 변수가 필요한지 여부는 터미널에서 수행하는 작업에 따라 다릅니다. 어떤 사용자에게는 변수가 데이터를 관리하는 데 필수적인 수단이지만, 어떤 사용자에게는 사소한 일시적인 편리함이며, 어떤 사용자에게는 존재하지 않을 수도 있습니다.

결국 변수는 도구입니다. 용도를 찾았을 때 사용하거나 OS에서 관리한다는 사실을 알고 편안하게 그대로 둘 수 있습니다. 그러나 지식은 힘이며 Bash에서 변수가 작동하는 방식을 이해하면 모든 종류의 예상치 못한 창의적 문제 해결로 이어질 수 있습니다.

변수 설정 방법

변수를 생성하기 위해 특별한 권한이 필요하지 않습니다. 그들은 무료로 만들고, 무료로 사용할 수 있으며 일반적으로 무해합니다. Bash 셸(Linux 및 Mac)에서는 변수 이름을 정의한 다음 값을 설정하여 설정할 수 있습니다. 다음 예는 FOO라는 새 변수를 생성합니다. 값을 /home/seth/Documents 문자열로 설정합니다. :

$ declare FOO="/home/seth/Documents"

성공은 끔찍할 정도로 조용하므로 변수가 설정되었다는 확신이 없을 수도 있습니다. echo 명령으로 결과를 직접 확인할 수 있습니다. , 변수 앞에 달러 기호($ ). 변수를 정의한 대로 정확하게 읽도록 하려면 중괄호와 따옴표로 묶을 수도 있습니다. 이렇게 하면 변수에 나타날 수 있는 모든 특수 문자가 보존됩니다. 이 예에서는 적용되지 않지만 다음을 형성하는 것이 여전히 좋은 습관입니다.

$ echo "${FOO}"
/home/seth/Documents

쉘을 자주 사용하는 사람들에게는 변수를 설정하는 것이 일반적일 수 있으므로 프로세스가 다소 비공식적입니다. 문자열 다음에 등호(= ) 및 값, Bash는 조용히 변수를 설정하고 있다고 가정하여 선언 불필요한 키워드:

$ FOO="/home/seth/Documents"

변수는 일반적으로 한 시스템에서 다른 시스템으로 정보를 전달하기 위한 것입니다. 이 간단한 예에서 변수는 그다지 유용하지 않지만 여전히 정보를 전달할 수 있습니다. 예를 들어 FOO의 콘텐츠가 변수는 파일 경로이므로 ~/Documents에 대한 바로 가기로 변수를 사용할 수 있습니다. 디렉토리:

$ pwd
/home/seth
$ cd "${FOO}"
$ pwd
/home/seth/Documents

변수는 예약되지 않은 문자열일 수 있습니다(정수 및 밑줄 포함). 대문자로 표시할 필요는 없지만 변수로 식별하기 쉽도록 대문자로 표시하는 경우가 많습니다.

변수를 지우는 방법

설정하지 않음으로 변수를 지울 수 있습니다. 명령:

$ unset FOO
$ echo $FOO

실제로 이 작업은 일반적으로 필요하지 않습니다. 변수는 상대적으로 "저렴"하므로 생성한 다음 더 이상 필요하지 않을 때 잊어버릴 수 있습니다. 그러나 변수를 읽을 수 있는 다른 프로세스에 잘못된 정보를 전달하는 것을 방지하기 위해 변수가 비어 있는지 확인하려는 경우가 있습니다.

충돌 방지 기능이 있는 새 변수 만들기

때로는 변수가 이미 사용자나 프로세스에 의해 설정되었다고 믿을 만한 이유가 있을 수 있습니다. 재정의하지 않으려면 기존 값이 비어 있지 않은 한 변수를 기존 값으로 설정하는 특수 구문이 있습니다.

이 예에서는 FOO /home/seth/Documents로 설정됩니다. :

$ FOO=${FOO:-"bar"}
$ echo $FOO
/home/seth/Documents

콜론 대시 :- 표기법은 선언을 유발합니다. 기존 값으로 기본값을 설정합니다. 이 프로세스가 다른 방식으로 작동하는지 보려면 변수를 지우고 다시 시도하십시오.

$ unset FOO
$ echo $FOO

$ FOO=${FOO:-"bar"}
$ echo $FOO
bar

하위 프로세스에 변수 전달

변수를 생성하면 로컬 변수라는 것이 생성됩니다. . 이것은 변수가 현재 쉘과 현재 쉘에만 알려져 있음을 의미합니다.

이 설정은 변수의 범위에 대한 의도적인 제한입니다. . 변수는 기본적으로 알 필요가 있는 정보 공유를 유지하기 위해 기본적으로 로컬에서만 사용 가능한 것으로 설정되는 경향이 있습니다. 예를 들어 어리석게도 중요한 암호가 포함된 변수를 일반 텍스트로 만든 경우 시스템이 원격 셸이나 악성 데몬(또는 변수를 생성한 세션 외부의 다른 모든 것)이 해당 암호에 액세스하는 것을 허용하지 않는다는 것을 아는 것이 좋습니다. .

이 문서의 시작 부분에 있는 예제를 사용하여 프롬프트를 변경한 다음 현재 쉘 내에서 새 쉘을 시작하십시오.

$ PS1="% "
% bash
$

새 셸을 시작하면 PS1의 새 값이 새 프롬프트 대신 기본 프롬프트입니다. 자식 프로세스는 부모에 설정된 변수를 상속하지 않습니다. 하위 프로세스를 종료하면 상위 셸로 돌아가 사용자 정의 PS1이 표시됩니다. 다시 프롬프트:

$ exit
%

변수를 자식 프로세스에 전달하려면 앞에 변수 정의가 있는 명령을 사용하거나 내보내기할 수 있습니다. 자식 프로세스에 대한 변수입니다.

앞에 변수

명령을 실행하기 전에 변수를 원하는 만큼 추가할 수 있습니다. 변수가 자식 프로세스에 의해 사용되는지 여부는 프로세스에 달려 있지만 무엇이든 상관없이 변수를 전달할 수 있습니다.

$ FOO=123 bash
$ echo $FOO
123
$

특정 라이브러리에 대한 특별한 위치가 필요한 애플리케이션을 실행할 때 앞에 추가하는 유용한 트릭이 될 수 있습니다(LD_LIBRARY_PATH 사용). 변수) 또는 비표준 컴파일러로 소프트웨어를 컴파일하는 경우(CC 변수) 등입니다.

변수 내보내기

하위 프로세스에서 변수를 사용할 수 있도록 하는 또 다른 방법은 내보내기입니다. 키워드, Bash에 내장된 명령. 내보내기 명령은 지정한 변수의 범위를 확장합니다.

$ PS1="% "
$ FOO=123
$ export PS1
$ export FOO
% bash
% echo $PS1
%
% echo $FOO
123

두 경우 모두 전달되거나 내보낸 로컬 변수에 액세스할 수 있는 자식 셸뿐만 아니라 해당 셸의 모든 자식 프로세스입니다. 동일한 셸에서 응용 프로그램을 시작할 수 있으며 해당 변수는 응용 프로그램 내에서 환경 변수로 사용할 수 있습니다.

사용하기 위해 시스템의 모든 항목에 대해 내보낸 변수를 환경 변수라고 합니다. , 향후 기사의 주제입니다. 그 동안 일상적인 작업에 몇 가지 변수를 사용하여 워크플로에 어떤 영향을 주는지 확인하세요.