! $은 무슨 뜻인가요? 튜토리얼을 따르고

튜토리얼을 따르고 있으며이 명령을 실행하는 것에 대해 언급합니다.

sudo chmod 700 !$

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



답변

기본적으로 이전 명령에 대한 마지막 인수입니다.

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

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

joe가 해당 사용자 목록에 있으면 제거합니다. 긴 디렉토리 트리를 인수로 사용하거나 vi를 vi !$bash가 확장하는 것처럼 vi를 실행할 수 있습니다 .

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

( 출처 : 편리한 가이드)


!$토큰과 특수 쉘 변수 의 차이점은 없습니다 $_. 실제로 둘 다 이전 명령의 마지막 인수로 확장됩니다. 그러나 !$시 확장 역사를 확장 하면서, $_시 확장 매개 변수 확장 . 이 중 한 가지 중요한 결과는 사용할 때,이다 !$확장 명령이 기록에 저장됩니다.

예를 들어, 키 입력을 고려하십시오

  • echo Foo Enter echo !$ Jar Enter Up Enter; 과

  • echo Foo Enter echo $_ Jar Enter Up Enter.

( $!및 변경된 문자 $_는 중간에 있습니다.)

전자에서을 누르면 Up명령 행이 echo Foo Jar이므로 stdout에 기록 된 마지막 행은 Foo Jar입니다.

후자의 경우을 누르면 Up명령 줄이을 읽지 echo $_ bar만 이제는 $_이전과 다른 값을 가지게되므로 실제로 $_Jar이므로 stdout에 기록 된 마지막 행은 Jar Jar입니다.

다른 결과는 _다른 매개 변수 확장 (예 : 명령 순서)에 사용될 수 있다는 것입니다.

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

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

Bash의 확장 단계에 대한 자세한 내용은 온라인 버전에서 셸 확장 이라고 하는 EXPANSION섹션을 참조하십시오 . 부분은 별개입니다.man 1 bashHISTORY EXPANSION


답변

엄밀히 말하면 !$기록 목록에서 마지막 명령의 마지막 단어입니다.

단어-쉘에서 단위로 취급되는 일련의 문자. 단어에는 따옴표없는 메타 문자를 포함 할 수 없습니다.

메타 문자-인용 부호가 없을 때 단어를 구분하는 문자입니다. 메타 문자는 공백이거나 ‘|’, ‘&’, ‘;’, ‘(‘, ‘)’, ‘<‘또는 ‘>’문자 중 하나입니다.

공백-공백 또는 탭 문자.

예 :

set -o history # enable command history
set -o histexpand # enable ! style history substitution

HISTSIZE=10

# save all lines on the history list    
HISTCONTROL=
HISTIGNORE=

date
echo !$ # prints date

date>/dev/null
echo !$ # prints /dev/null

echo a b c>/dev/null
echo !$ # prints /dev/null

HISTCONTROL=ignorespace # lines which begin with a space character are not saved in the history list
echo a b c
 echo d e f # space at the beginning
echo !$ # prints c

답변

!$ 특정 사용자에게 사용 된 마지막 명령을 제공합니다 ….

당신은 또한 명령을 사용하여 이전에 사용 된 history명령 의 역사를 찾을 수 있습니다 … 그것을 사용해보십시오 ….

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