나는 튜토리얼을 따라 가고 있으며이 명령을 실행하도록 언급했습니다.
sudo chmod 700 !$
!$
에 익숙하지 않습니다. 무슨 뜻입니까?
댓글
답변
기본적으로 “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
Enterecho !$ Jar
Enter 위로 Enter ; 및 -
echo Foo
Enterecho $_ 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. '
!$
- BTW, 명령 줄에서 일반적으로
M-.
에 바인딩 된insert-last-argument
로 이전 명령의 마지막 인수를 삽입 할 수 있습니다. - @Andrew는 귀하의 질문에 대한 답변이 있으면이를 수락하는 것을 잊지 마십시오. 의견을 게시하는 것보다 수락 및 찬성하는 것이 SE 네트워크에서 감사를 표하는 방식입니다. 를 참조하십시오. "
와 같은 것을 Google에서 검색하기 어렵습니다.
official " 입장
답변
엄격히 말하면 !$
는 히스토리 목록에서 마지막 명령의 마지막 단어입니다.
단어-셸에서 하나의 단위로 취급되는 일련의 문자입니다. 단어는 인용되지 않은 메타 문자를 포함 할 수 없습니다.
메타 문자-인용되지 않은 경우 단어를 구분하는 문자입니다. 메타 문자는 공백이거나 |, &, ;, (, ), 또는>
공백-공백 또는 탭 문자
예 :
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
설명
Answer
!$
는 마지막으로 사용한 명령을 제공합니다. 특정 사용자를 위해 ….
history
명령을 사용하여 이전에 사용한 명령 기록을 찾을 수도 있습니다. 시도해보십시오 ….
참고 : 특정 사용자의 경우 이전에 사용한 모든 명령이 bash 기록 파일에 저장됩니다.
댓글
- 다른 대답은 맞습니다. 이것은 잘못되었습니다.
' 무엇을할지 잘 모르겠다면 '
echo $(rm -rf /)
--no-preserve-root
옵션이 필요하며 " 보존 안함 프로그램에서 수행하는 작업에 대해 신중하게 생각하는 것이 좋습니다.