답변:
이것은 백틱 입니다. 백틱은 따옴표가 아닙니다. 매우 특별한 의미가 있습니다. 백틱 사이에 입력하는 모든 내용은 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
많은 상황에서 백틱을 사용하는 것이 좋지 않은 이유를 알아 보려면 이 질문 을 살펴보십시오 .
Btw, 예를 들어 문자열에서 백틱을 문자 그대로 사용하려면 백 슬래시 ( \
)를 앞에 두어 이스케이프 처리 할 수 있습니다 .
$()
대부분의 상황에서 사용하는 것이 좋은 습관이라고 생각하지만 백틱을 더 나쁘게 만들지는 않습니다 . 실제로는 명령 줄에 입력하는 것이 훨씬 빠르다는 것을 인정해야합니다 (을 포함하여 5 번 이상에 비해 2 번의 키 입력 Shift
).
$( )
보다 타이핑하기가 훨씬 쉽습니다 ` `
.
여기에 몇 가지 포인트를 더 추가하고 싶습니다.
백틱 `…`
은 실제로는 명령 대체 라고 합니다. 명령 대체의 목적은 백틱 내에 배치 된 명령을 평가하고 그 결과를 실제 명령에 대한 인수로 제공하는 것입니다.
명령 대체는 두 가지 방법으로 수행 할 수 있습니다. 하나는 사용 $(…)
하고 다른 하나는 입니다 `…`
. 둘 다 동일하게 작동하지만 $(…)
형태는 현대적인 방식이며 더 명확하고 가독성이 있습니다.
그래서
sudo chown $(id -u) /somedir
다른 것보다 선호 될 수 있습니다.
여기서주의해야 할 사항 은 bash 문서 에서 언급 한 bash 인용 규칙 과의 명령 대체 관계입니다 .
큰 따옴표 안에 대체가 나타나면 단어 분리 및 파일 이름 확장이 결과에서 수행되지 않습니다.
$(...)
더 나은 둥지.
$()
와 "``"
같은 방식으로 작동하지 않습니다
설명에 대한 한 가지 참고 사항은 거의 다루지 않았습니다.
백틱 (프랑스어 및 기타 언어에서는 공통 악센트로 두 배가되므로 그레이브라고도 함)은 표준 출력 만 대체 하지만 표준 오류는 대체 하지 않습니다.
이전 예제를 계속하려면
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 :)
백틱은 명령 대체와 유사합니다. 이 백틱 구문은 구식이며 두 개의 괄호가있는 달러 기호가 일반적이라는 것을 알고 $()
있습니다.
명령 대체는 명령을 실행하고 나중에 사용하기 위해 출력을 변수에 저장하는 전용 구문을 사용하는 단일 작업입니다.
thedate=$(date)
그런 다음 결과를 인쇄 할 수 있습니다 : '날짜는 % s \ n' "$ thedate"`입니다.
$()
입니다.date
입니다.$(date)
어떤 출력이 대체인지 알 수 있습니다.printf
위의 명령 에 따라 변수로 보유한 출력 값을로 표시합니다 .
$(your expression)
있는 것과 같은 일을하는 것이 더 좋은 방법$()
입니다. 예를 들어 : 명령을cd $(dirname $(type -P touch))
포함하는 디렉토리로 cd합니다touch