명령 행에서 괄호는 어떻게 해석됩니까?


45

설정 방법을 읽는 동안 grub다음 두 구문 중 하나를 사용해야한다고 주장하는 기사를 발견했습니다.

echo \(hd0,0\) >> /boot/grub/grub.conf

또는

echo '(hd0,0)' >> /boot/grub/grub.conf

명령 행에서 괄호는 특별한 방식으로 해석되기 때문입니다. 괄호에서 특별한 점은 무엇입니까? 그들은 어떻게 해석됩니까?

답변:


46

괄호는 bash의 서브 쉘을 나타냅니다. man bash페이지 를 인용하려면 :

(list)    list  is  executed  in  a  subshell  environment (see COMMAND
          EXECUTION ENVIRONMENT below).  Variable assignments and builtin 
          commands that affect the shell's environment do not remain in 
          effect after the command completes.  The return status is the
          exit status of list.

여기서 a list는 일반적인 명령 시퀀스입니다.

이것은 실제로 이식성이 뛰어나지 만 그다지 구체적이지 않습니다 bash. POSIX 쉘 명령 언어 사양은 에 대한 다음 설명이 (compound-list)구문을 :

서브 쉘 환경에서 복합 목록 을 실행하십시오 . Shell Execution Environment를 참조하십시오 . 환경에 영향을주는 변수 할당 및 기본 제공 명령은 목록이 완료된 후에도 유효하지 않습니다.


bash와 다른 껍질에서 ...?
jasonwryan

3
bash는 내가 묻고있는 것입니다 ...
Steve Brown

5
차이 무엇 $()()?
CMCDragonkai

5
@CMCDragonkai $()명령 대체이며 하위 ()쉘입니다. 둘 다 명령을 실행하지만 차이점은 출력에 발생합니다. 이름보다 기호를 검색하기가 훨씬 쉽습니다. 참조 unix.stackexchange.com/q/213530/9537
jw013

12

괄호 안에 포함 된 명령 목록 은 서브 쉘로 실행됩니다.

서브 쉘의 변수는 서브 쉘의 코드 블록 외부에 표시되지 않습니다. 상위 프로세스, 서브 쉘을 시작한 쉘에 액세스 할 수 없습니다. 이들은 사실상 지역 변수입니다.

Linuxtopia-20 장. 서브 쉘을 참조하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.