셸에서의 특수문자

셸에서의 특수문자

문자 의미
\ (백슬래시) (1) 특수 문자의 기능을 제거하는 escape 문자
(2)긴 명령 행을 여러 줄로 분리할 때 사용
~ (틸드) ~ 또는 ~username 은 사용자의 홈 디렉터리를 의미
. (도트) (1) 현재 작업 디렉터리
(2) 혹은 명령 행 맨 앞에서 셸 스크립트를 실행하는 source 명령
.. (더블도트) 현재 디렉터리의 부모 디렉터리
# (파운드) # 문자 뒤는 주석 처리
$ (달러) 변수를 표시할 때 사용
$변수이름 은 변수의 값을 추출
& (앰퍼샌드) 명령 백그라운드 실행
백그라운드 실행시에는 명령&과 같이 사용
혹은 “파일 디스크립터 참조”를 의미함
* (애스터리스크) 파일 이름에 사용할 때 0개 이상의 임의 문자열을 뜻함
docker* : docker로 시작하는 문자열
*docker* : docker가 포함된 문자열
? (물음표) 파일 이름에 사용할 때 1개의 임의 문자와 대응됨
docker? : docker로 시작하면서 뒤에 한 글자가 있는 문자열
| (파이프) 앞 명령의 출력을 다음 명령의 입력으로 연결시킴
< 또는 > 입출력 리다이렉션
파일이나 명령어로부터 입력받을 때, 또는 파일로 출력할 때 사용
» 표준 출력을 파일의 끝에 덧붙일 때 사용
! (느낌표) 명령 히스토리 기능을 이용할 때 사용
(화이트스페이스) 명령 행 구성 요소를 분리하는 역할
’’ (인용부호)
”” (인용부호)
공백을 포함하는 문자열을 표시할 때
특별한 의미를 가진 문자를 일반 문자로 처리하기 위해 사용
`` (역따옴표) 명령 치환 기능 : 명령의 결과를 다른 명령의 인수로 사용할 때
; (세미콜론) 여러 명령을 순서대로 실행할 때 구분을 위해 사용
$() 명령 치환. 하나의 명령의 출력을 다른 명령의 인자로 사용
$() 안쪽의 명령이 우선 실행되며, 이후 나머지 명령이 실행된다.

파이프

파이프 설명  
명령1 명령2 앞 명령의 결과의 표준출력을 뒤 명령으로 연결한다.
명령1 2> &1 명령2 앞명령의 표준출력 및 표준오류 출력을 뒤 명령으로 연결한다.

-앞 명령의 출력 결과를 다음 명령의 입력으로 연결
-명령1 | 명령2 와 같이 사용함

1
2
cat /etc/passwd | sort | more
# /etc/passwd 파일의 내용을 > 알파벳순으로 정렬하고 > 페이지 단위로 잘라 출력
1
2
3
4
ls | grep 'docker'
>> docker
>> docker-compose
>> docker_mounts

리다이렉션

리다이렉션 설명
명령 > 파일 명령 수행의 결과를 표준 출력을 파일로 보냄
명령 2> 파일 명령 수행 중 표준 오류 출력을 파일로 보냄
명령 > file 2 > &1 표준출력과 표준오류 출력을 지정 파일로 보냄
명령 < 파일 명령 수행에 필요한 입력을 표준 입력 대신 파일로부터 얻음
명령 < 파일.in > file.out file.in을 표준 입력으로 읽고, 표준 출력을 file.out으로 보냄
명령 » 파일 표준출력을 지정 파일의 끝에 덧붙임
명령 2 » 파일 표준요류 출력을 지정 파일 끝에 덧붙임
명령 » 파일 2 > &1 표준출력과 표준오류 출력을 지정 파일 끝에 덧붙임
1
2
3
4
5
6
7
8
9
10
11
# 입력 리다이렉션
sort < /etc/passwd

# 출력 리다이렉션
grep typedef /usr/include* > typedef.out

# 표준 오류 리다이렉션
python app.py > /dev/null 2>&1

# 출력을 파일에 덧붙임
ls 2>> error.txt

숫자의 의미

숫자 의미
1 표준 출력 (STDOUT, 파일 디스크립터 1)
2 표준 에러 (STDERR, 파일 디스크립터 2)

명령 치환

하나의 명령의 결과를 다른 명령의 인수로 사용하는 방법. 지정된 부분의 명령을 셸이 먼저 해석한 후, 나머지 명령을 실행하는 순서로 진행된다. $(command) 또는 `command` 와 같이 사용한다.

1
2
3
4
5
which passwd
>> /usr/bin/passwd

ls -l $(which passwd)
>> -rwsr-xr-x. 1 root root 32656 May 15  2022 /usr/bin/passwd

인용 부호

인용 부호는 빈칸을 포함하는 문자열을 한 개의 인수로 사용할 때 사용한다.

인용 부호 설명
작은따옴표 (‘’) 안에 있는 모든 문자에 대해 특수문자의 의미를 제거함
큰따옴표 (“”) 안에 있는 특수문자의 기능을 그대로 실행하도록 한다.
즉, $, ``, /, ! 를 해석해 확장한다.
역슬래시 (\) 역슬래시 뒤 하나의 문자에 대해 특수문자의 의미를 제거한다.
즉, 특수문자가 일반문자로 취급되게 한다.
1
2
3
4
5
6
7
8
echo '$(date)'
>> $(date)

echo "$(date)"
>> Sun Nov 24 16:35:43 KST 2024

echo "\$(date)"
>> $(date)

헛갈림 주의!
-작은따옴표 : 특수문자 의미를 제거
-큰따옴표 : 특수문자 기능 그대로 유지

수식과 변수의 확장

사용법 설명
$[수식] 또는 $((수식)) 명령 수행 전에 수식의 결과를 계산해 전달
$변수 명령 수행 전에 변수의 값을 추출해 전달
1
2
3
4
5
echo "9 - 7 = $[9-7]."
>> 9 - 7 = 2

echo $HISTSIZE
>> 1000

Reference

UNIX시스템 - 김희천,김진욱 저