셸에서 느낌표는 소리 지르는 게 아니다. 게으르게 쓰자
A shell exclamation mark is not for yelling. Be lazy

셸 히스토리에서 반복되는 명령을 화살표 키로 찾는 대신, 이벤트 지정자(event designator)를 활용하면 이전 명령이나 인자를 직접 참조할 수 있다. bash, zsh, csh 등에서 사용 가능한 !!나 !$ 같은 단축 표현부터 :h, :t 같은 수정자까지, DRY 원칙을 커맨드라인에도 적용하는 법을 소개한다. 또한 POSIX 표준의 fc 명령으로 셸 밖에서 명령을 편집·재실행하는 방법과, histverify 같은 안전장치도 다룬다.
느낌표는 소리 지르는 게 아니라, 게으름을 위한 것이다.
HN 토론
75- userbinator
누군가 이걸 언급할 때마다, 나는 '아 맞다, 그렇게 할 수 있지'라고 생각하다가 곧바로 잊어버린다. 특히 빨리 타이핑할 수 있다면, 흐름을 끊는 '정신적 분기'를 추가하는 것보다 원하는 명령으로 '그냥 직진'하는 게 더 쉽다. 같은 이유로 나는 백스페이스로 수정하려고 하기보다 Ctrl+C를 누르고 다시 시작하는 경우가 많다.
- idoubtit
수십 년 전, 나는 `sudo !!` 트릭을 좋아했던 리눅스 사용자에게 `!`와 그 친구들을 배웠다. 그런 다음 나는 이 암묵적 보간(interpolation)에서 명시적 단축키로 전환했고, 그렇게 한 것을 기쁘게 생각한다.
아래 FAQ에서 제안된 대로, !… 대신 ctrl-r을 사용할 수 있다. 또는 더 나은 방법으로, 선택적으로 처음 몇 글자를 입력한 다음 alt-p나 '위쪽 화살표'를 누르는 것이다. 그것은 더 강력하고 확장성이 좋다. alt-. 같은 다른 단축키는 과거 매개변수로 이동할 수 있게 해준다.
위쪽 화살표, alt-p, alt-. 등을 사용하면 명령줄에 실제 명령이 표시된다. !… 마법은 오류가 발생하기 쉽고 모호하다. zsh에서는 TAB을 눌러 마법을 정적 텍스트로 확장하는 것을 권장한다.
FAQ에 다른 항목을 추가하겠다: `sudo !!`를 입력하면 셸 히스토리에 변경 없이 저장되는가, 아니면 `!!`가 보간된 후에 저장되는가? 공백으로 명령줄을 시작하여 zsh가 셸 히스토리에 저장하지 않도록 하면, !…도 그 줄을 무시하는가? `!$`는 재귀적인가?
- miki123211
내 생각에 !$는 그중에서 가장 유용하다 (마지막 명령의 마지막 인자로 대체되는 것이다).
!!는 위쪽 화살표와 엔터로 쉽게 할 수 있는데, 그만큼 빠르다. !ssh는 ctrl+r로 할 수 있는데, 실제로 무엇을 실행할지 그리고 마지막 ssh가 생각하는 그곳으로 가는지 보여준다. sudo !!는 위쪽 화살표, ctrl+a, 'sudo '로 할 수 있는데, 키 입력이 하나 더 들지만 readline을 안다면 자연스럽다. 나머지는 너무 복잡해서 배울 가치가 없다. !$가 딱 좋은 지점이다.
- inigyou
이것은 전신타자기를 위한 것이다. 대화형 전자 비디오 디스플레이를 가진 우리 같은 사람들은 위쪽 화살표로 마지막 명령을 불러오거나 Ctrl-R로 히스토리를 검색한 다음, 불러온 명령을 편집할 수 있다.
- Terr_
어떻게 보면 '멋지다'거나 '유용하다'기보다는, 명령줄에서 어떤 것이 실제로 무엇을 하는지 알아내는 것이 유기적으로 얼마나 복잡한지에 대해 절망감을 느끼게 된다. 공정하게 말하자면, 나는 항상 '가장 간단한 스크립트만 셸 언어로 작성해야 한다'는 쪽에 치우쳐 있었다.
이것은 또한 셸 명령을 무해하고 올바른 것으로 검토/검증하는 데 흥미로운 새로운 차원을 추가한다... LLM이 내가 승인하길 원하는 작은 요청에서 이 트릭을 (남용)하기 시작하는 데 얼마나 걸릴까?