5. Expansion & Quoting

froajnzd·2024년 11월 6일
0

the linux command line

목록 보기
5/6
post-thumbnail

Expansion (확장)

우리가 bash에서 엔터를 칠때마다
bash는 우리의 명령어를 수행하기 전에 그 문자에 여러 가공을 한다.

*는 특히 shell에서 많은 의미가 있다.
명령어를 수행하기 전에 여러 가공을 하는 것을 Expansion 이라한다.

Pathname Expansion (경로명 확장)

경로명 확장: 와일드카드가 작동하는 매커니즘

Tilde Expansion (틸드 확장)

'~'를 틸드 문자라고 한다.
단어의 시작 부분에 사용하면 사용자의 홈디렉토리 이름(명명된 사용자가 없다면 현재 사용자의 홈디렉토리)으로 확장된다

Arithmetic Expansion

셸을 사용하면 확장을 통해 산술연산을 수행할 수 있다
echo $((2 + 2)) 이런식으로 $((expression)) 산술 표현식을 작성하면 된다

  • 산술 확장은 정수만 지원한다 (소수점은 지원하지 않음)
  • 연산자는 + - * / % ** 연산을 지원한다
  • 표현식을 중첩할 수 있다.
  • 단일 괄호를 사용해 여러 하위 표현식을 그룹화할 수 있다

Brace Expansion (중괄호 확장)

preamble (선행 부분)과 postscript (후행부분)이 포함될 수 있다
중괄호 표현식에는 쉼표로 구분된 문자열 목록/정수 또는 단일 문자 범위가 포함될 수 있다
패턴에는 따옴표로 묶이 않은 공백이 포함될 수 없다

[me@linuxbox ~]$ echo Front-{A,B,C}-Back
Front-A-Back Front-B-Back Front-C-Back

[me@linuxbox ~]$ echo Number_{1..5}
Number_1 Number_2 Number_3 Number_4 Number_5

# 정수 zero-pading
[me@linuxbox ~]$ echo {01..15}
01 02 03 04 05 06 07 08 09 10 11 12
[me@linuxbox ~]$ echo {001..15} 13 14 15
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015

# 역순 나열
[me@linuxbox ~]$ echo {Z..A}
Z Y X W V U T S R Q P O N M L K J I H G F E D C B A

Parameter Expansion (매개변수 확장)

작은 데이터 청크를 저장하고 각 청크에 이름을 부여하는 시스템의 기능
!변수!

셸 스크립트에서 많이 쓰임

[me@linuxbox ~]$ echo $USER
me

[me@linuxbox ~]$ printenv | less

[me@linuxbox ~]$ echo $SUER

[me@linuxbox ~]$

Command Substitution (명령 치환)

명령의 출력을 확장으로 사용 가능

[me@linuxbox ~]$ echo $(ls)
Desktop Documents ls-output.txt Music Pictures Public Templates Videos

# which cp의 결과를 ls 명령에 인수로 전달하여 전체 경로명을 몰라도 cp 프로그램의 목록을 가져온다.
[me@linuxbox ~]$ ls -l $(which cp)
-rwxr-xr-x 1 root root 71516 2007-12-05 08:58 /bin/cp

# 파이프라인의 결과가 file 명령의 인수 목록이 됨
[me@linuxbox ~]$ file $(ls -d /usr/bin/* | grep zip)
/usr/bin/bunzip2:       symbolic link to `bzip2'
/usr/bin/bzip2:         ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped
/usr/bin/bzip2recover:  ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped
/usr/bin/funzip:        ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped
/usr/bin/gpg-zip:       Bourne shell script text executable
/usr/bin/gunzip:        symbolic link to `../../bin/gunzip'
/usr/bin/gzip:          symbolic link to `../../bin/gzip'
/usr/bin/mzip:          symbolic link to `mtools'

# 이전 셸 프로그램에는 명령 치환을 위한 대체 문법이 있다. bash에서도 지원. 달러 기호, 괄호 대신 백쿼터(backquote) 사용
[me@linuxbox ~]$ ls -l `which cp`
-rwxr-xr-x 1 root root 71516 2007-12-05 08:58 /bin/cp

Quoting (인용)

셸을 제어할 수 있는 방법

[me@linuxbox ~]$ echo this is a     test
this is a test

[me@linuxbox ~]$ echo The total is $100.00
The total is 00.00

잘못된 출력

Double Quotes (더블쿼츠)

텍스트를 더블쿼츠 안에 넣으면 셸에서 사용하는 모든 특수 문자는 의미를 잃고 일반 문자로 취급
예외 : $ (backslash) `(back-quote)

단어 분리, 경로명 확장, 틸드 확장, 중괄호 확장은 제한되지만 매개변수 확장, 산술확장, 명령 치환은 계속 수행

더블쿼츠를 사용하면 공백이 포함된 파일 이름에 대응할 수 있다

Single Quotes

모든 확장을 제한해야 하는 경우 싱글쿼츠 사용

Escaping Character (이스케이프 문자)

한 문자만 인용하고 싶을 때, 문자 앞에 백슬래시(\)를 넣어 인용

profile
Hi I'm 열쯔엉

0개의 댓글