튜토리얼을 따르고 있으며이 명령을 실행하는 것에 대해 언급합니다.
sudo chmod 700 !$
에 익숙하지 않습니다 !$
. 무슨 뜻이에요?
echo $(rm -rf /)
--no-preserve-root
거기에 옵션 이 필요할 것입니다. 그리고 프로그램에서 "보존하지 않음"이라는 단어를 보게되면, 그것이 무엇을하는지 신중하게 생각하는 것이 좋습니다.
튜토리얼을 따르고 있으며이 명령을 실행하는 것에 대해 언급합니다.
sudo chmod 700 !$
에 익숙하지 않습니다 !$
. 무슨 뜻이에요?
echo $(rm -rf /)
--no-preserve-root
거기에 옵션 이 필요할 것입니다. 그리고 프로그램에서 "보존하지 않음"이라는 단어를 보게되면, 그것이 무엇을하는지 신중하게 생각하는 것이 좋습니다.
답변:
기본적으로 이전 명령에 대한 마지막 인수입니다.
!$
이전 명령의 "종료"입니다. 다음 예제를 고려하십시오. 파일에서 단어를 찾는 것으로 시작합니다.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 bash
HISTORY EXPANSION
!$
insert-last-argument
에서으로 보통 이전 명령의 마지막 인수를 삽입 할 수 있습니다 M-.
.
엄밀히 말하면 !$
기록 목록에서 마지막 명령의 마지막 단어입니다.
단어-쉘에서 단위로 취급되는 일련의 문자. 단어에는 따옴표없는 메타 문자를 포함 할 수 없습니다.
메타 문자-인용 부호가 없을 때 단어를 구분하는 문자입니다. 메타 문자는 공백이거나 '|', '&', ';', '(', ')', '<'또는 '>'문자 중 하나입니다.
공백-공백 또는 탭 문자.
예 :
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
echo
무엇을해야할지 확실치 않은 경우 에는 시도해 보는 것이 일반적으로 안전합니다 .