백틱(`) 이해하기

백틱(`) 이해하기

명령을 시도하고 있습니다

$ b=5; echo `$b`;
-bash: 5: command not found

그러나 예상대로 5가 인쇄되지 않습니다. 내가 여기서 무엇을 놓치고 있는 걸까요?

명령에서 `(백틱/백틱)은 무엇을 의미합니까?`그 안에 들어있는 명령이 평가되어 출력으로 대체된다고 말하는 것 같습니다 .

답변1

백틱 사이의 텍스트가 실행되고 명령의 출력으로 대체됩니다(후행 개행 문자 제외, 출력에 NUL 문자가 있을 때 쉘이 다르게 동작함을 참고하십시오). 그것은이라고명령 대체명령의 출력으로 대체되기 때문입니다. 따라서 5를 인쇄하려면 백틱을 사용할 수 없습니다. 따옴표를 사용 echo "$b"하거나 따옴표를 제거하고 를 사용할 수 있습니다 echo $b.

보시다시피 5가 포함되어 있으므로 $bbackticks 를 사용하여 bash명령을 실행하려고 하면 5해당 명령이 존재하지 않기 때문에 오류 메시지와 함께 실패합니다.

백틱이 어떻게 작동하는지 확인하려면 다음 명령을 실행해 보세요.

$ A=`cat /etc/passwd | head -n1`
$ echo "$A"

cat /etc/passwd |head -n1파일의 첫 번째 줄이 인쇄되어야 합니다 /etc/passwd. 그러나 백틱을 사용하고 있으므로 콘솔에 인쇄되지 않습니다. 대신 A변수 에 저장됩니다 . $A이에 대응하시면 됩니다 . 첫 번째 줄을 인쇄하는 더 효율적인 방법은 명령을 사용하는 것이지만 head -n1 /etc/passwd백틱 안의 표현식이 사소할 필요는 없다는 점을 지적하고 싶습니다.

따라서 /etc/passwd의 첫 번째 줄이 이면 root:x:0:0:root:/root:/bin/bash첫 번째 명령은 bash로 동적으로 대체됩니다 A="root:x:0:0:root:/root:/bin/bash".

이 구문은 Bourne 쉘에 속합니다. 인용과 탈출은 금새 악몽이 될 수 있습니다. 특히 중첩을 시작하면 더욱 그렇습니다. Ksh는 $(...)이제 표준화된 대안을 도입했습니다(POSIX)이며 모든 쉘(Unix v9의 Bourne 쉘 포함)에서 지원됩니다. 따라서 지금 $(...)은 매우 오래된 Bourne 쉘로 포팅해야 하는 경우가 아니면 이를 사용해야 합니다 .

`...`또한 및 의 출력은 $(...)변수 확장(zsh에서는 토큰화만)과 마찬가지로 토큰화 및 파일 이름 생성의 영향을 받으므로 목록 컨텍스트에서 인용해야 하는 경우가 많습니다.

답변2

백틱은 당신이 말하는 것과 정확히 일치합니다. 변수를 정수로 설정했습니다. 백틱 안에 변수를 넣으면 bash는 이를 명령으로 실행하려고 시도합니다. 명령이 아니기 때문에 오류가 발생합니다.

당신이 하고 싶은 일은 간단합니다:

$ b=5; echo "$b"

백틱을 더 잘 이해하려면 다음을 비교하십시오.

$ b=5; a=`echo "$b"`; echo "$a"
5

답변3

라인을 단계별로 살펴보면 설명이 될 것입니다.

$ b=5; echo `$b`;
  1. 변수를 b5로 설정
  2. 평가 $b(효과적인 운영 5)
  3. echo위 평가의 결과입니다.

그렇습니다. 결과는 예상됩니다. 실제 명령이라고 생각하는 것이 아니라 변수의 내용을 평가하고 있습니다. 백틱 안에 입력한 모든 내용은 새 (하위)쉘에서 간단히 평가(실행)됩니다.

관련 정보