cd`(backtick)의 목적은 무엇입니까?


57

다음은 Fedora 및 CentOS에서 동일하게 작동합니다.

cd mydirectory

공장.

cd notadirectory

작동합니다 (Bash에서 오류가 발생 함).

하나,

cd `

나에게 일종의 프롬프트를 제공합니다.

>

내가 입력하려고 생각한 것은 응답을 제공하지 않습니다. 다시 다음 프롬프트로 넘어갑니다. 나는 단순히 CTRL+ C를 사용 하여 내로 돌아갑니다 root@localhost.

이것의 목적은 무엇이며 어떻게 할 수 있습니까?

감사!



6
당신의 질문은 >다른 상황에서도 발생할 수 있기 때문에 당신의 질문은 백틱에 관한 것 보다 더
중요

답변:


124

입력 한 내용은 백틱 입니다. 명령으로 입력 한 내용을 평가하기위한 명령의 시작입니다. 는 >여전히 다음 줄에 명령을 입력하는 나타 내기 위해 표시됩니다.

백틱을 닫으면 전체 명령이 실행됩니다. 예 :

~$ cd `
> echo /var`
/var$

17
중첩 할 수도 있습니다. 다소 현실적인 예를 들면 다음과 같습니다. cd `dirname \`which ls\``= "ls"이진이있는 디렉토리로 cd합니다. (즉 cd /bin, 그것 이후 /bin/ls) [편집 : 휴, 그 마크 다운을 탈출 탈출 하드]
MSalters

54
@MSalters 당신은 아마도 현대 배쉬가 선호하는 이유 우연히 한 $()``. 귀하의 예 (정확한 인용 부호) cd "$(dirname "$(which ls)")"는 훨씬 덜 미치게됩니다.
Muzer

31
@Muzer 그것을 선호하는 것은 배쉬 일뿐 만 아니라 POSIX 사양 에서 $()백 쿼트를 초과 하는 것이 좋습니다 .
불가사리

59

JohnC의 답변은 이미 역효과를 설명합니다. 그러나 궁금한 점은 >프롬프트입니다. 이것은 연속 프롬프트이며, 백틱 (backtick)에 의해 트리거 될뿐만 아니라, 항상 쉘이 명령 입력을 완료하지 않았다는 것을 명확하게 알고있을 때 발생합니다. 가장 쉬운 예는 \입력 줄 끝에 명시적인 줄 연속 을 두는 것입니다 (긴 입력을 나누는 데 도움이 됨).

$ echo \
> hallo

PS1명령 프롬프트의 모양을 제어하는 것처럼 PS2연속 프롬프트를 변경하도록 설정할 수도 있습니다 ( 예 :

$ export PS2="(cont.) "
$ echo \
(cont.) hallo

계속되는 데는 여러 가지 이유가 있습니다. 하나의 백틱이 불완전하지만 다음과 같은 내용을 입력 할 수도 있습니다.

ls -l `which cp`

단일 라인 (사이드 노트 : 사용하는 것이 권장 $(하고 )대신 괄호가 분명하기 때문에 어디 하나의 역 따옴표가 더 어렵게 볼 수 있도록하는 동안 확장 시작 및 종료, 어디 하나의 실종과 중첩 ....). 연속 프롬프트의 다른 가능한 이유 :

  • done이후 while또는 누락for
  • fi후 실종if
  • 누락 된 esac후에case
  • 닫는 괄호 (예 : 서브 쉘) (cd $HOME; cat .bashrc)
  • 파이핑 후 |조건부 실행뿐만 아니라 누락 된 명령 ||&&( &단지 백그라운드에서 명령을 실행하기 때문에 아닙니다 )
  • 결산 인용 부호 ( '또는 ")

흥미롭게도 }변수 확장 후 괄호가 없으면 ${연속 프롬프트가 발생하지만 삽입 된 공간으로 인해 실패합니다.

$ echo ${
> PS2}
bash: ${
PS2}: bad substitution

2
따옴표를 사용할 때도 같은 일이 일어납니다 :)
Steen Schütt

1
사이드 바에서이 질문에 대한 답을 이미 알고 있었지만, 아주 좋은 심도있는 답변을 위해 가상의 +1을 추가하고 싶었습니다. 이것은 StackExchange 사이트를 멋지게 만드는 일종의 콘텐츠입니다. 그래 ... 고마워요
Unkwntech

4

명령이 아직 완료되지 않았 음을 의미합니다. 실제로 문자 backtick `는 인라인 명령을 구분하는 데 사용됩니다.

예:

cd /tmp # Go to /tmp
pwd # Prints the current working  directory
ls `pwd` # Lists the content of the current working directory

0

백틱은 명령 대체를 시작 / 종료합니다. 쉘은 백틱 내에서 명령을 읽고 결과를 해석 한 다음 해당 결과를 명령에 넣습니다. 예 :. ls which cp는 "which cp"가 실행되고 해당 명령의 결과, 즉 / bin / cp가 ls 명령의 인수로 사용됩니다. 그러나이 동작은 더 명확하고 읽기 쉬운 $ (cmd) 명령 대체를 위해 더 이상 사용되지 않습니다.

cd를 입력 할 때`셸은 명령이 수행되어 백틱으로 닫힐 것으로 예상합니다.

중괄호를 사용하는 변수 확장의 경우 확장이 완료되기 전에 중괄호가 사 전적으로 평가되므로 쉘은 연속 프롬프트를 표시합니다.

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