튜토리얼을 따르고 있으며이 명령을 실행하는 것에 대해 언급합니다.
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
Enterecho !$ Jar
Enter Up Enter; 과 -
echo Foo
Enterecho $_ 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 bash
HISTORY 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 기록 파일에 저장됩니다.