! $은 무슨 뜻인가요?

나는 튜토리얼을 따라 가고 있으며이 명령을 실행하도록 언급했습니다.

sudo chmod 700 !$ 

!$에 익숙하지 않습니다. 무슨 뜻입니까?

댓글

  • '는 일반적으로

    ' 무엇을할지 잘 모르겠다면 '

  • @Shadur, 항상 그런 것은 아닙니다. echo $(rm -rf /)
  • @cjm ' 정말 오래된 시스템을 사용하지 않는 한 ' 여기에 --no-preserve-root 옵션이 필요하며 " 보존 안함 프로그램에서 수행하는 작업에 대해 신중하게 생각하는 것이 좋습니다.
  • @WChargin " 정말 오래되었다 " 및 " Linux가 아님 / GNU coreutils를 사용하지 않음 "은 동일합니다. ' t가 아닙니다.

답변

기본적으로 “s는 이전 명령의 마지막 인수입니다.

!$는 이전 명령의”끝 “입니다. . 다음 예를 고려하십시오. 파일에서 단어를 찾는 것으로 시작합니다.

grep -i joe /some/long/directory/structure/user-lists/list-15 

joe가 해당 사용자 목록에있는 경우 해당 사용자를 제거합니다. . 긴 디렉토리 트리를 인수로 사용하여 vi를 실행하거나 간단히 vi !$ 어떤 bash가 확장되는지 :

vi /some/long/directory/structure/user-lists/list-15 

( 출처 ; 참고로 편리한 가이드)


!$ 토큰과 특수 셸 변수 $_를 구별 할 가치가 없습니다. . 실제로 둘 다 이전 명령의 마지막 인수로 확장됩니다. 그러나 !$ 기록 확장 중에 확장되고 $_ 매개 변수 확장 중에 확장됩니다. em>. 이로 인한 한 가지 중요한 결과는 !$를 사용할 때 expanded 명령이 기록에 저장된다는 것입니다.

예 : 키 입력 고려

  • echo Foo Enter echo !$ Jar Enter 위로 Enter ; 및

  • echo Foo Enter echo $_ Jar 입력 Enter

(변경된 유일한 문자는 $!$_ 중간)

전자에서는 위로 를 누르면 명령 줄이 echo Foo Jar를 읽으므로 stdout에 기록 된 마지막 줄은 Foo Jar입니다.

후자의 경우 Up , 명령 줄은 echo $_ bar를 읽지 만 이제는 $_가 이전과 다른 값을 갖습니다. 실제로, $_는 이제 Jar이므로 stdout에 기록 된 마지막 줄은 Jar Jar입니다.

p>

또 다른 결과는 _를 다른 매개 변수 확장 (예 : 명령 시퀀스)에서 사용할 수 있다는 것입니다.

printf "%s " isomorphism printf "%s\n" ${_%morphism}sceles 

인쇄 isomorphism isosceles. 그러나 유사한 “${!$%morphism}“확장은 없습니다.

Bash의 확장 단계에 대한 자세한 내용은 EXPANSION

섹션 (온라인 버전에서는 쉘 확장 이라고 함). HISTORY EXPANSION 섹션은 분리되어 있습니다.

댓글

  • 좋습니다. 알아두면 좋습니다. 또한 좋은 점입니다. ' s Stack Exchange. ' !$
  • 와 같은 것을 Google에서 검색하기 어렵습니다.

  • BTW, 명령 줄에서 일반적으로 M-.에 바인딩 된 insert-last-argument로 이전 명령의 마지막 인수를 삽입 할 수 있습니다.
  • @Andrew는 귀하의 질문에 대한 답변이 있으면이를 수락하는 것을 잊지 마십시오. 의견을 게시하는 것보다 수락 및 찬성하는 것이 SE 네트워크에서 감사를 표하는 방식입니다. 를 참조하십시오. "

official " 입장

  • @Andrew FYI, Google에서 " bash bang dollar "이 링크를 세 번째 목록으로 포함하여 괜찮은 결과를 얻었습니다.
  • @terdon 어제 밤에 대답을 수락하려고했지만 너무 빨라서 수락하기 위해 기다려야했습니다.
  • 답변

    Answer

    !$는 마지막으로 사용한 명령을 제공합니다. 특정 사용자를 위해 ….

    history 명령을 사용하여 이전에 사용한 명령 기록을 찾을 수도 있습니다. 시도해보십시오 ….

    참고 : 특정 사용자의 경우 이전에 사용한 모든 명령이 bash 기록 파일에 저장됩니다.

    댓글

    • 다른 대답은 맞습니다. 이것은 잘못되었습니다.

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다