명령에서 $ ()는 무엇입니까?


18

$()Linux Shell Commands 란 무엇입니까 ?

예를 들면 다음과 같습니다.

chmod 777 $(pwd)

1
line shell command 와 같은 것은 없습니다 . Linux에서 사용할 수있는 많은 쉘 응용 프로그램이 있습니다.
Stéphane Chazelas

답변:


21

백틱과 매우 유사합니다 .``.

이를 명령 대체 ( posix specification ) 라고 하며 서브 쉘을 호출합니다. $()백틱 (``) 중괄호 또는 그 사이의 명령은 서브 쉘에서 실행 된 다음 출력이 원래 명령에 배치됩니다.

백틱과 달리 $(...)양식을 중첩 할 수 있습니다. 따라서 다른 대체 내부에서 명령 대체를 사용할 수 있습니다.

대체 문자에서 이스케이프 문자에는 차이가 있습니다. 나는 $(...)양식을 선호합니다 .


4
백틱도 중첩 될 수 있습니다. 명령의 출력에서 ​​후행 줄 바꿈 문자가 제거됩니다.
Stéphane Chazelas

2
@ StéphaneChazelas 어떻게 백틱을 중첩시킬 수 있습니까? 당신은 ecxessive 탈출을 의미합니까?
혼돈

3
예 : 등으로echo `echo \`echo foo\`` bar
스테판 Chazelas가

1
백틱이 더 이상 사용되지 않는다고 공식적으로 언급 한 적이 있습니까?
vinc17

1
이 답변을 찾았습니다 : unix.stackexchange.com/questions/126927/… 더 이상 사용되지 않는 것 같습니다. 내 답변을 변경했습니다. 감사합니다
혼돈

5

POSIX 또는 POSIX에서 껍질 같은 ( ksh, bash, ash, zsh, yash와 같은 ...)는 그 ``명령은 내부 : $()실행하고 표준 출력으로 대체된다. $()큰 따옴표 안에 있지 않으면 단어 분리 및 파일 이름 생성이 수행됩니다 . 그러므로

chmod 777 $(pwd)

다음으로 교체해야합니다.

chmod 777 "$(pwd)"

현재 작업 디렉토리 경로에서 단어 분리 및 파일 이름 생성을 방지합니다.

또는 디렉토리 이름이 변경된 경우 zsh와 같은 일부 쉘에서는 제외하십시오.

chmod 777 "$PWD"

$PWDPOSIX 쉘의 현재 작업 디렉토리에 대한 경로를 보유하는 특수 변수 이기 때문 입니다.

또는 더 나은 :

chmod 777 .

.현재 디렉토리 의 항목은 해당 디렉토리 자체에 대한 하드 링크이기 때문입니다.


2

이것은 $()대부분 다른 명령 내에서 명령을 실행하는 데 사용됩니다.

chmod 777 $(pwd)

pwd명령은 현재 작업 디렉토리를 제공합니다. 따라서 전체 작업이 실행될 때 pwd의 출력이 위치를 대체하고 인수의 역할을 chmod하며 결과적으로 현재 작업 디렉토리가 777프로덕션 환경에서 절대 사용해서는 안되는 권한 을 얻습니다 .

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