[Linux] Shell 확장 6가지와 Shell 인용 3가지

echo 명령어를 사용해서 Shell 확장(Expansion)에 대해 알아 보겠습니다.

  • echo 명령어
  • echo는 도스, OS/2, 유닉스 및 유닉스 계열 운영 체제에서 문자열을 컴퓨터 터미널에 출력하는 명령어입니다.
  • 쉘 스크립트 변수, 터미널의 환경 변수 및 변수를 확인할 때 사용합니다.

1. Shell 확장

Shell 확장(Expansion)이란 셸에서 프로그램을 실행하기 직전 사용자가 입력한 인자를 정해진 의미에 맞게 해석해서 입력 or 출력으로 전환하는 것을 의미합니다. 프로그램은 echo를 포함한 명령어와 쉘에서 실행하는 모든 기능과 명령어들을 의미합니다.

~]$ echo hello oooo
hello oooo

echo 명령어로 인수(or 인자: Argument)가 표시됩니다.

  • 아스타리스크(*)를 활용 했을 경우 현재 폴더의 모든 파일을 출력합니다.
~]$ echo *
1 123test.txt TestFile.txt abc.12 abc123 gg1 gg1~ gg2 gg3 index.php1 
index.php2 index.php2~ output.txt sort.txt

1.1 경로명 확장(Pathname Expansion)

와일드카드가 작동하는 메커니즘을 경로명 확장(Pathname Expansion)이라고 합니다.

~]$ ls
1 123test.txt TestFile.txt abc.12 abc123 gg1 gg1~ gg2 gg3 index.php1 
index.php2 index.php2~ output.txt sort.txt

~]$ echo abc*
abc.12 abc123
~]$ echo *ndex*
index.php1 index.php2 index.php2~
# 중간에 애스터리스크를 넣을 경우입니다. 
~]$ echo /usr/lib/*/sysctl.d
/usr/lib/*/sysctl.d

1.2 틸드 확장(Tilde Expansion)

주로 cd 명령어에서 많이 사용하는 틸드 확장(Tilde Expansion)은 틸드(~)를 사용합니다. echo에서도 동일한 사용이 가능합니다.

~]$ echo ~rocky/
/home/rocky/

1.3 산술 확장(Arithmetic Expansion)

~]$ echo $((2 + 2))
4

산술 확장은 산술 연산을 수행하며, 셸 프롬프트에서 계산기로 사용할 수 있습니다. 정수 확장만 지원하고 소수점은 지원하지 않습니다.

연산자설명
+덧셈
-뺄셈
*곱셈
/나눗셈(단, 확장은 정수 연산만 지원하므로 결과는 정수가 됩니다)
%Modulo, 간단히 “나머지”를 의미합니다
**제곱(승수)
  • 5의 3 제곱에 2를 곱할 경우 다음과 같이 입력합니다.
~]$ echo $(($((5**3)) * 2))
250
  • 산술확장 나눗셋 연산자 예시입니다. 일반 나눗셈과 %로 사용 시 나누기 후 정수의 나머지 숫자를 확인할 수 있습니다.
~]$ echo Hello   $((7/2))
Hello 3
~]$# echo Hello   $((7%2))
Hello 1

1.4 중괄호 확장(Brace Expansion)

중괄호 확장(Brace Expansion)은 중괄호가 포함된 여러 텍스트 문자열을 만들 수 있습니다.

~]$ echo TEST{A,B,C}GG
TESTAGG TESTBGG TESTCGG
~]$ echo TEST-{A,B,C}-GG
TEST-A-GG TEST-B-GG TEST-C-GG

중괄호 확장은 머리말(preamble)이라는 선행 영역과 후행 영역에 해당하는 postscript(추신)이 포함될 수 있습니다.

  • 앞서 확인한 것처럼 쉼표로 문자열을 표현하거나
  • 정수 및 문자의 범위를 표현할 수 있습니다.
~]$ echo TEST-{A..G} 
TEST-A TEST-B TEST-C TEST-D TEST-E TEST-F TEST-G
~]$ echo TEST-{g..a}
TEST-g TEST-f TEST-e TEST-d TEST-c TEST-b TEST-a
~]$ echo {001..20} 13 14 15
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 13 14 15
  • 중첩 사용도 가능합니다.
~]$ echo ABC-{A{1,2},B{3,4}}-DEF
ABC-A1-DEF ABC-A2-DEF ABC-B3-DEF ABC-B4-DEF

중괄호 확장의 용도는 디렉토리 목록을 만들 때 유용하게 사용할 수 있습니다. “년도-월” 형식으로 숫자 디렉토리를 만들 수 있습니다.

~]$ mkdir 2020-2021
~]$ cd 2020-2021
~]$ mkdir mkdir {2020..2021}-{01..12}

1.5 매개변수 확장(Parameter Expansion)

매개변수(영어: parameter 파라미터[*])란 변수의 특별한 한 종류입니다. 인풋으로 제공하는 여러 데이터 중에 하나를 가리키기 위해 사용됩니다.

~]# echo $USER
root
## 사용 가능 변수 목록 확인 ▼
printenv 
## 매개변수 변수 이름이 틀릴 경우 빈 문자열이 출력됩니다.
~]# echo $SUER

~]#

1.6 명령 치환(Command Substitution)

명령 치환으로 명령어 출력을 확장으로 변경할 수 있습니다.

~]# ls  $(which rsync)
/usr/bin/rsync

2. Shell 인용(Quoting)

달러 사인($)을 사용했을 때 “$100″으로 출력된 것이 아닌 “100”으로 출력됨을 알 수 있습니다. 인용을 사용해서 누락된 부분에 대한 출력이 가능합니다. 쉘은 원치 않는 확장을 차단하는 인용이라는 메커니즘을 제공합니다.

~]# echo Show Me The Money
Show Me The Money
~]# echo Show Me The Money $100
Show Me The Money 00
  • Quoting을 사용해서 쉘에 특수한 의미를 제거하는 데 사용할 수 있습니다.
  • 특수 문자 비활성화 기능
  • 예약어가 인식되지 않도록 설정 기능
  • 매개 변수 확장 방지 기능

2.1 더블 쿼츠(Double Quotes)

더블 쿼츠를 사용해서 더블 쿼츠 안의 모든 특수 문자는 일반 문자로 적용 받습니다. 예외는 $\(backslash) 및 `(back-quote) 3개의 문자입니다.

더블 쿼츠 적용/미적용설명
$ \ ` 쌍 따옴표 안에서 3개의 기호는 일반문자 예외 적용 받음.
> 매개변수 확장[$], 산술 확장[$],명령어 치환[\]은 그대로 실행
적용 대상단어 분할, 경로명 확장, 틸드(~) 확장, 괄호 확장을 숨길 수 있음.

“05-06 access_log”이란 공백이 있는 파일을 확인해야 하는 경우 단일 인수가 아닌 두개의 인수로 인식해서 파일을 출력할 수 없는 오류 메시지를 확인할 수 있습니다.

~]# ls -l 05-06 access_log.txt
ls: cannot access 05-06: No such file or directory
ls: cannot access access_log.txt: No such file or directory

이제 쌍따옴표(Double Quotes)를 사용했을 때 나오는 내용입니다.

~]# ls -l "05-06 access_log.txt"
-rw-rw-r-- 1 root   root   18 2029-07-20 17:13 05-06 access_log.txt

더블 쿼츠는 텍스트에서 공백이 있더라도 유닉스 시스템에서는 한 칸으로 인식하며 텍스트의 일부로 인식하지 않습니다.

~]# echo Show    Me The    Money
Show Me The Money
## 텍스트의 일부로 인식시키기 위해 쌍따옴표 사용하기
~]# echo "Show    Me The    Money"
Show    Me The    Money
##
~]# echo $(cal)
February 2024 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

~]# echo "$(cal)"
    February 2024   
Su Mo Tu We Th Fr Sa
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29      

2.2 싱글 쿼츠(Single Quotes)

싱글 쿼츠(Single Quotes)는 모든 확장을 제한한 때 사용합니다. 더블 쿼츠에서 제한할 수 없던 $ 옵션을 제한할 수 이쓴 것을 확인할 수 있습니다.

~]# echo Show Me The Money '$100'
Show Me The Money $100

2.3 이스케이프 문자(Escape Character) 백슬러쉬

‘$’ 문자를 출력하기 위해 이스케이프 문자인 백슬래시(\)를 넣어서 출력할 수 있습니다. 더블 퀴츠에서도 이스케이브 문자인 백슬러시를 적용해서 $를 출력할 수 있습니다. 백슬래시(\)는 쌍 따옴표 안에서 자주 사용됩니다.

~]# echo Show Me The Money \$100
Show Me The Money $100
~]# echo Show Me The Money "\$100"
Show Me The Money $100

2.3 Shell 인용과 이스케이프 문자 정리표

차후 더 많은 확장과 인용을 사용하게 되기 때문에 가장 기본적인 Shell 확장과 인용에 대해 정리 해 봤습니다.

쉘 스크립트(Shell Script)

Similar Posts