나는 다음 명령을 발견했습니다.
sudo chown `id -u` /somedir
`
알고 싶습니다. 이 기호는 무엇을 의미하나요? 예를 들어, 위 명령은 제대로 작동하지만 다음 명령은 작동하지 않는 것을 확인했습니다.
sudo chown 'id -u' /somedir
답변1
이것은백틱.백틱은 따옴표가 아닙니다.그것은 매우 특별한 의미를 가지고 있습니다. 백틱 사이에 입력하는 모든 내용은 chown
예제에서와 같이 기본 명령 이전의 셸에서 평가(실행)됩니다.산출실행된 프로세스는 마치 명령줄의 해당 위치에 출력을 입력한 것처럼 명령에 의해 사용됩니다.
그래서 뭐
sudo chown `id -u` /somedir
효율적으로 실행됩니다(다음에 따라 다름).귀하의 사용자 ID) 예:
sudo chown 1000 /somedir
\ \ \ \
\ \ \ `-- the second argument to "chown" (target directory)
\ \ `-- your user ID, which is the output of "id -u" command
\ `-- "chown" command (change ownership of file/directory)
`-- the "run as root" command; everything after this is run with root privileges
구경하다이 문제많은 상황에서 백틱을 사용하는 것이 왜 나쁜 생각인지 알아보세요.
그런데 백틱을 문자 그대로 사용하려면,예를 들어문자열에서 \
문자열 앞에 백슬래시( )를 넣어 이스케이프할 수 있습니다.
답변2
여기에 몇 가지 사항을 추가하고 싶습니다.
백틱은 `…`
실제로 호출됩니다.명령 대체. 명령 대체의 목적은 백틱 안에 있는 명령을 평가하고 그 결과를 실제 명령에 대한 인수로 제공하는 것입니다.
명령 대체는 두 가지 방법으로 수행할 수 있습니다. 하나는 using $(…)
이고 다른 하나는 입니다 `…`
. 둘 다 동일하게 작동하지만 $(…)
현대적인 방식으로 훨씬 더 명확하고 읽기 쉽습니다.
그래서
sudo chown $(id -u) /somedir
다른 것보다 우선할 수 있습니다.
또 한 가지 주의하셔야 할 점은명령 대체과의 관계bash 인용 규칙bash에서 언급했듯이문서.
큰따옴표 내에서 대체가 발생하면 결과에 대해 단어 분리 및 파일 이름 확장이 수행되지 않습니다.
답변3
거의 언급되지 않는 설명:
백틱(프랑스어 및 기타 언어에서 공통 악센트 역할을 하기 때문에 Graves라고도 함) 대체표준 출력만, 그러나 표준 오류는 아닙니다.
이전 예를 계속하면 다음과 같습니다.
file `which hostname`
예상대로 작동하지만 다음에서는
file `which hostnameX`
which
file
오류가 반환되고 해당 출력은 교체되지 않고 표준 오류로 전환됩니다. 옆에 있는 명령줄에는 표준 출력이 전혀 없습니다. 다음을 실행하여 이를 확인할 수 있습니다.
which hostnameX
which hostnameX 2>/dev/null
이 경우,
file `which hostnameX`
생산할 것이다둘오류 메시지(첫 번째는 which hostnameX
파일 자체로 인해 파일 이름이 누락되었기 때문에 이전 것 이후 두 번째는 파일 이름이 누락되었기 때문에 전체 명령이
본질적으로 이는 다음과 같이 감소합니다.
file
물론 이는 잘못된 사용법이며 사용법 오류를 반환합니다.
(직접 확인하고 싶다면 다음을 시도해 보세요.
file `which hostnameX 2>/dev/null` # just the file-command bad-usage error msg is printed
file `which hostnameX 2>/dev/null` 2>/dev/null # now nothing is printed on the screen :)
답변4
이 기호는 그 안에 있는 모든 것이 이 명령의 결과로 해석된다는 것을 의미합니다.
예를 들어:
$ls /home
one two
$pwd
/usr/three
$cp `pwd` /home
$ls /home
one two three
위의 결과로 three
디렉터리가 내 디렉터리에 복사됩니다 /home
.