리눅스에서는 Quoting Rule이라는 규칙들이 존재합니다.
Quoting Rule(인용 규칙)
먼저들어가기전에 메타 문자부터 설명하겠습니다.
Metacharacters(메타 문자)란 shell에서 특별히 의미를 정한 문자들을 얘기합니다.
" \ ? ( ) ... * % {} [] 띄어쓰기 포함 "등을 얘기하는 것이죠
각 문자들의 의미를 설명 하면
| 기호 | 의미 |
| * | 모든 문자 |
| a* | a로 시작하는 모든 문자 |
| ? | ?개의 글자 개수인 문자 (ex. post라는 문자는 ????물음표를 4개 사용 ) |
| {1..3} | 1부터 3까지의 문자 (ex. p{1..3} p로 시작하는 문자들중 1에서 3까지의 문자 |
Quoting rule은 메타문자의 의미를 제거하고 단순한 문자로 변경하는 것을 말합니다.
방법에는 아래의 3가지가 존재합니다.
BackSlash(\)
- \ 바로 뒤의 메타문자의 의미 제거
Double Quotes(" ")
- " " 안의 모든 메타문자들의 의미를 제거. 단 $,``은 제외
Single Quotes(' ')
- ' ' 안의 모든 메타문자들의 의미를 제거
메타 문자의 의미를 제거한 다는 것을 예를 들면
* 는 모든 문자를 뜻하는 의미를 가진 메타 문자입니다.
만약 ***라는 파일을 만들려고하면 과연 실행이 될까요?
$ touch ***
따로 오류는 발생하지 않지만 파일이 생성 되지 않습니다.
이때 ***라는 이름을 가진 파일을 만들고 싶다면 아래의 명령을 통해 생성 할 수 있습니다.
$ touch '***'
$ ls

위 ls 명령을 통해 확인 해 본 결과 ***라는 파일이 생성된 것을 볼 수 있습니다.
꼭 Single quotes가 아닌 double quotes , backSlash 등으로 똑같은 실행 결과를 얻을 수 있습니다.
Nesting commands(중첩 명령문)
특정 메타기호가 아닌 명령문을 일반 문자와 함께 사용하려고 할 땐 어떻게 해야 할 까요?
위 내용과 비슷합니다.
이번엔 "This time is date"라는 파일을 생성 해 보겠습니다. 어? 우리는 date라는 명령어를 알고 있습니다.
바로 시간을 출력해주는 명령어입니다. 그럼 아래명령어를 실행했을 경우 "This time is 현재시간"이 출력 될거라고 믿을 겁니다.
$ touch "This time is date"
하지만 ls 명령어로 확인한 결과 입력한 문자열 그대로 출력 되는 것을 볼 수 있는데요

우리가 원하는 값을 출력하고자 할 땐
일반 문자열 제외 명령어를 $()로 감싸거나 ``로 감싸기만 하면 됩니다.
$ touch "This time is $(date)"
$ touch "This time is `date`"
ls 명령어로 확인해 보면 아래와 같은 결과 값을 얻을 수 있습니다.

이렇게 중첩으로 명령어를 사용할 때는 Double quotes를 사용해야 합니다. 왜냐하면
Single quotes는 $와 ``조차 의미를 지워버리기 때문이죠
$ touch 'This time is `date`'

위 처럼 주의를 하면서 사용하면 명령어와 각 문자들을 효율 좋게 사용할 수 있습니다.
Alias(별칭)
Alias는 명령에 새로운 별명 별칭을 부여해주는 명령어입니다.
관련 명령에는 3가지만 기억하면 됩니다.
alias 등록
$ alias 별칭이름=명령문
별칭은 위와 같이 만들 수 있습니다. 예를 들어 아래와 같이 clear 명령어를 c라는 명령어로 만들 수 있습니다.
$ alias c=clear
* clear 명령는 입력한 명령어들을 화면상에서 지워주는 명령입니다.
c라는 명령을 입력하면 clear와 똑같은 기능을 볼 수 있습니다.
alias 확인
$ alias
입력한 alias
적용되어 있는 모든 alias 명령들이 출력됩니다.
alias 삭제
$ unalias 별칭이름
특정한 별칭을 삭제할 수 있습니다.
* 중요
alias 명령으로 지정한 별칭들은 로그아웃시 초기화 되므로
.bashrc 파일에 alias 명령문들을 저장해 두면 껏다 키거나 로그아웃했을 때 초기화되는 것을 막을 수 있습니다.
아래 명령으로 추가 할 수 있습니다.
$ echo "alias c=clear" >> .bashrc
이 명령은 "alias c=clear"라는 명령문을 .bashrc파일 제일 아래 칸에 추가해라 라는 의미입니다.
꼭! 화살표(>)를 두 개로 해주셔야합니다. 만약 한 개로 했다면 기존에 있는 내용을 덮어 씌운다는 의미가 돼서
.bashrc 파일에 큰 손상을 줄 수 있습니다.
Prompt(프롬프트)
프롬프트는 우리가 Shell을 사용할 때 명령어 입력칸 바로 좌측에 있는 부분을 얘기합니다.
ubuntu@host:~$ <-- 이부분을 말합니다.
각 문자가 의미하는 내용을 볼까요?
| 이름 | 의미 |
| ubuntu | 로그인한 사용자 명 |
| host | 호스트 네임 |
| ~ | 현재 위치 |
| 그외 | 큰 의미 x 단순한 문자 |
프롬프트는 PS1 환경변수에 저장되게 됩니다. 프롬프트를 변경할 때는 PS1 내용을 변경하면 되겠죠
그런데 프롬프트를 변경할 땐 특수문자가 들어가게 됩니다. 종류를 한 번 보시죠
| 특수문자 | 의미 |
| \h | 호스트이름 |
| \u | 사용자이름 |
| \w | 작업 디렉토리 - 절대경로 |
| \W | 작업 디렉토리 - 상대경로 |
| \d | 오늘 날짜 |
| \t | 현재 시간 |
| \$ | $또는 # 프롬프트 모양 |
이런 특수문자를 이용해서 프롬프트를 만들 수 있습니다. 한 번 만들어 보시죠
이전 시간에 배웠던 변수 만드는 방법을 참고 하면 내용을 수정할 수 있습니다.
$ PS1='\u@\h:\w\$ '
위 명령과 같이 수정을 하게 되면
ubuntu@host:~ $ 처럼 바뀌게 됩니다.
PS1도 로그아웃하면 초기화 되니 .bashrc 파일 내용 아래에 추가해주면 영구적용되게 됩니다.
이상입니다.
| 리눅스의 모든 것을 배울 때까지 공부해봅시다. |

'Linux > Shell Programming' 카테고리의 다른 글
| 05.[Linux] 쉘(shell) Positional Parameters 란? (1) | 2023.01.31 |
|---|---|
| 04.[Linux] 쉘(shell) Script 란? (0) | 2023.01.20 |
| 03.[Linux] 쉘(shell)과 Rules 2 (0) | 2023.01.19 |
| 01.[Linux] 쉘(shell)과 변수 (0) | 2023.01.17 |
| 00.[Linux] 쉘(shell) 이란? (1) | 2023.01.17 |