!$은 무슨 뜻인가요?

!$은 무슨 뜻인가요?

튜토리얼을 읽고 있는데 다음 명령을 실행한다고 언급되어 있습니다.

sudo chmod 700 !$

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

답변1

기본적으로 이전 명령의 마지막 매개변수입니다.

!$이전 명령의 "끝"입니다. 다음 예를 고려하십시오. 먼저 파일에서 단어를 찾습니다.

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

joe가 사용자 목록에 있으면 우리는 그를 제거하고 싶습니다. 긴 디렉토리 트리를 인수로 사용하여 vi를 시작하거나 간단히 vi !$which bash가 다음으로 확장되는 것처럼 시작할 수 있습니다.

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 Jarstdout에 기록되는 마지막 줄은 입니다 Foo Jar.

후자의 경우 를 누르면 Up명령줄이 표시되지만 echo $_ bar이제 $_값이 이전과 다르고 $_실제로는 now 이므로 Jarstdout에 작성된 마지막 줄은 now 입니다 Jar Jar.

또 다른 결과는 _명령 시퀀스와 같은 다른 매개변수 확장에 사용될 수 있다는 것입니다.

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

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

Bash의 확장 단계에 대한 자세한 내용은 다음을 참조하세요 EXPANSION.man 1 bash쉘 확장온라인 버전에서는). 이 HISTORY EXPANSION섹션은 별개입니다.

답변2

기술적으로 !$기록 목록에 있는 마지막 명령의 마지막 단어입니다.

단어 - 쉘에서 하나의 단위로 처리되는 일련의 문자입니다. 단어에는 따옴표가 없는 메타 문자가 포함되어서는 안 됩니다.

메타 문자 - 인용되지 않은 단어를 구분하는 데 사용되는 문자입니다. 메타 문자는 공백이거나 "|", "&", ";", "(", ")", "<" 또는 ">" 문자 중 하나입니다.

공백 - 공백 또는 탭 문자입니다.

예:

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

답변3

!$해당 특정 사용자가 사용한 마지막 명령을 제공합니다.

command를 사용하여 이전에 사용한 명령의 기록을 찾을 수도 있습니다 history. 한번 시도해 보세요...

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

관련 정보