느낌표가 있는 문자열의 에코

느낌표가 있는 문자열의 에코

bash에 입력한 내용과 "echo"에 대해 얻은 내용은 다음과 같습니다.

$ echo '!$'   
!$  
$ echo "!$"  
echo "'!$'"  
'!$'

"echo"가 두 번째 입력을 어떻게 처리하는지 알고 싶습니다. "echo"는 먼저 입력한 문자열(필요한 경우 일부 확장)을 인쇄한 다음 일부 문자열(실행 가능한 경우)을 실행하는 것 같습니다.

구성할 수는 있지만 이해할 수 없는 더욱 흥미로운 예는 다음과 같습니다.

$ echo '!$'  
!$  
$ echo "!echo "!$""  
echo "echo '!$' "'!$'""  
echo '!$' !$

답변1

명령에서:

echo "!$"

!$bash이전에서 으로 확장되었습니다 echo.큰따옴표 안에!, 활성화된 경우 백슬래시 이스케이프를 사용 하지 않는 한 기록 확장을 수행합니다 \. bash확장이 완료되었으며 echo여기서는 아무 작업도 수행되지 않고 결과 내용만 인쇄됩니다.

!$이전 명령의 마지막 매개변수인 string 을 참조합니다 '!$'.

두 번째 예에서는:

$ echo '!$'
!$
$ echo "!echo "!$""
echo "echo '!$' "'!$'""
echo '!$' !$

Command echo "echo '!$' "'!$'""에 전달된 매개변수는 echo세 부분으로 나뉩니다.

  • 첫째: "echo '!$' ", string 으로 확장됩니다 echo '!$'.
  • 두 번째: '!$', string 으로 확장되었습니다 !$.
  • 세 번째: "", 빈 문자열로 확장됩니다.

답변2

echo인수를 반복하여 표준 출력으로 보내면 됩니다.

모든 마법은 쉘에 의해 수행됩니다. 쉘은 일부 패턴을 다른 패턴으로 대체합니다. 예를 들어 변수( 로 시작 $), 기록 레코드( 로 시작 !) 등이 있습니다.

bash자세한 내용은 설명서를 참조하세요 .

관련 정보