본문 바로가기

언어/Bash

[ Bash ] history 명령어를 확장해서 사용하기

반응형

유닉스 셸에서 워드 지정자(Word Designators)는 주로 명령어 히스토리를 편리하게 재사용하고 수정하기 위한 도구로 사용됩니다.
워드 지정자는 히스토리 확장(History Expansion) 기능의 일환으로, Bash와 같은 셸에서 강력하게 활용될 수 있습니다.
이를 통해 이전에 입력한 명령어를 쉽게 참조하고 부분적으로 재사용할 수 있습니다.

1. 히스토리 확장 기본 개념

히스토리 확장은 주로 ! 문자를 사용하여 이전 명령어를 참조합니다. 워드 지정자는 이 확장을 좀 더 세부적으로 제어하는 데 사용됩니다. 먼저, 기본적인 히스토리 확장 방법들을 살펴보겠습니다.

1. 기본 히스토리 확장

  • !!: 바로 이전 명령어를 재실행합니다.
  • !n: 히스토리 번호가 n인 명령어를 재실행합니다.
  • !-n: 현재 명령어에서 n번째 이전 명령어를 재실행합니다.
  • !string: string으로 시작하는 가장 최근 명령어를 재실행합니다.
  • !?string[?]: string이 포함된 가장 최근 명령어를 재실행합니다.

2. 워드 지정자

워드 지정자는 히스토리 확장에서 특정 부분(워드)을 참조하는 기능을 제공합니다. 기본 형식은 다음과 같습니다:

!event:word
  • event는 히스토리 이벤트 지정자입니다(예: !!, !n, !string 등).
  • word는 명령어의 특정 부분을 지정합니다.

1. 워드 지정자의 종류

  • ^: 첫 번째 워드 (명령어의 첫 번째 인수).
  • $: 마지막 워드.
  • n: n번째 워드 (0부터 시작).
  • x-y: x부터 y까지의 워드 범위.
  • *: 첫 번째 워드부터 마지막 워드까지 모두.
  • x*: x번째 워드부터 마지막 워드까지 모두.
  • -y: 첫 번째 워드부터 y번째 워드까지 모두.

2. 예제

가정: 아래와 같은 명령어 히스토리가 있다고 합시다.

1001  echo Hello World
1002  ls -l /usr/local/bin
1003  grep "search term" file.txt
  • !1002:0: ls (히스토리 번호 1002의 첫 번째 워드).
  • !1002:1: -l (히스토리 번호 1002의 두 번째 워드).
  • !1003:$: file.txt (히스토리 번호 1003의 마지막 워드).
  • !1003:2: "search term" (히스토리 번호 1003의 세 번째 워드).
  • !1002:*: -l /usr/local/bin (히스토리 번호 1002의 첫 번째 인수부터 끝까지).
  • !1003:1-2: grep "search term" (히스토리 번호 1003의 두 번째 워드부터 세 번째 워드까지).
  • !1002:1*: -l /usr/local/bin (히스토리 번호 1002의 두 번째 워드부터 끝까지).

3. 히스토리 확장 조합 예제

# echo Hello World 명령어를 다시 실행하지만, "Hello"를 출력
$ echo Hello World
$ !1001:1
Hello

# ls -l /usr/local/bin 명령어를 다시 실행하지만, "/usr/local/bin"만 출력
$ ls -l /usr/local/bin
$ !1002:2
/usr/local/bin

# grep "search term" file.txt 명령어에서 "file.txt"를 다른 명령어에서 사용
$ grep "search term" file.txt
$ cat !1003:$
cat file.txt

3. 추가 옵션

1. :p 옵션

명령어를 실행하지 않고 확장된 결과만 출력합니다.

$ !1001:p
echo Hello World

4. 요약

  • 워드 지정자는 히스토리 확장에서 특정 부분을 참조하는 기능을 제공합니다.
  • !event:word 형식으로 사용되며, 다양한 형태의 워드 지정자가 있습니다.
  • 이를 통해 히스토리 명령어의 특정 부분을 재사용하고 수정할 수 있습니다.
반응형