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

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

$()Linux 쉘 명령에는 무엇이 있습니까?

예를 들어:

chmod 777 $(pwd)

답변1

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

그것은 알려져있다명령 대체(POSIX 사양) 그리고 서브쉘을 호출합니다. 중괄호 $()또는 역따옴표( ) 사이의 명령은 `…`하위 쉘에서 실행되고 출력은 원래 명령에 배치됩니다.

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

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

답변2

POSIX 또는 POSIX와 유사한 셸( ksh, bash, ash, , zsh, yash...)에서는 다음과 같습니다. ``내부에서 명령을 실행하고 이를 표준 출력으로 바꿉니다. 큰따옴표 안에 있지 않으면 $()단어 분리 및 파일 이름 생성이 수행됩니다. $()그러므로

chmod 777 $(pwd)

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

chmod 777 "$(pwd)"

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

또는 더 좋습니다(디렉토리 이름이 변경된 경우 zsh와 같은 일부 셸에서는 제외).

chmod 777 "$PWD"

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

또는 더 나은 방법은 다음과 같습니다.

chmod 777 .

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

답변3

이는 $()주로 다른 명령 내에서 명령을 실행하는 데 사용됩니다.

chmod 777 $(pwd)

pwd이 명령은 현재 작업 디렉터리를 제공합니다. 따라서 전체 프로세스가 실행되면 pwd의 출력은 pwd의 인수로서의 위치를 ​​대체하고 chmod결과적으로 현재 작업 디렉토리는 모두 777프로덕션 환경에서 절대 사용해서는 안 될 권한을 갖게 됩니다. ;)

관련 정보