터미널 교체! 명령과 함께 숫자 다음에


12

우분투 터미널 세션에 대해 매우 혼란 스럽습니다. 명령으로 시작하는 섹션을 !임의의 명령으로 보이는 숫자 로 대체하는 것으로 보입니다 . 그것은 않습니다와 !87함께 교체 screen -l도 함께 !88하고 그것을 대체 ls.

왜 이런 일이 일어나고 있는지에 대한 아이디어는 대단히 감사하겠습니다.


답변:


20

그것은 bash역사 확장이다.

!87

히스토리 라인에서 명령을 다시 실행합니다 87.

이 기능에 대한 설명은 man bash섹션의“역사 확장” 에서 찾을 수 있습니다 .

       An  event  designator  is  a  reference  to a command line entry in the
       history list.  Unless the reference is absolute, events are relative to
       the current position in the history list.

       !      Start  a  history substitution, except when followed by a blank,
              newline, carriage return, = or ( (when the extglob shell  option
              is enabled using the shopt builtin).
       !n     Refer to command line n.
       !-n    Refer to the current command minus n.

따라서 마지막 명령을 빠르게 호출하려면 마지막 명령을 수행 !-1하십시오 !-5. 편리한 동의어 !-1!!– 예를 들어 호출 apt install something하고을 잊어 버린 경우 sudo실행 만하면 sudo !!됩니다.

역 슬래시 ( \ )와 작은 따옴표 만 히스토리 확장 문자를 인용 할 수 있습니다.

히스토리 확장을 피하려면 백 슬래시 ( \!)로 느낌표를 이스케이프 하거나 작은 따옴표 ( '!')를 사용해야합니다 .


3
!명령에 리터럴을 전달하고 기록 확장을 피하려면 작은 따옴표 또는 이스케이프해야합니다. foo '!87'또는 foo \!87. (큰 따옴표도 내용의 확장을 수행 할 것입니다.)
quixotic
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.