본문 바로가기

스터디/리눅스 커맨드라인

[리눅스] 7. 확장과 인용

 

확장

: 명령어를 입력하고 엔터키를 누르면 bash는 그 명령어를 수행하기 전에 텍스트에 몇 가지 프로세스를 진행한다.

* 기호처럼 쉘에 여러 의미를 주는 경우나 연속된 문자열로 처리되는 것과 같은 경우처럼, 이러한 프로세스를 확장이라고 한다.

확장이라는 기능으로 인해 무엇이든 입력하면 쉘이 그것을 처리하기 전에 다른 무언가로 확장된다.

 

확장을 이해하려면 echo 명령어를 사용하면 된다.

  • echo : 표준 출력상에 텍스트 인자를 표시.

 

 iseungmin@iseungmin-ui-MacBookAir  ~  echo this is test                                                           ✔  1993  15:45:58
this is test

 

this is test 라는 텍스트가 표시되었다.

 

 

 iseungmin@iseungmin-ui-MacBookAir  ~  echo *                                                                
Ably Applications Brewfile Desktop Documents Downloads Library Movies Music Pictures Postman Public PycharmProjects Virtual Machines.localized ant_community_backend_fastapi ls-output.txt node_modules opt package-lock.json package.json project_server react-app

 

왜 * 기호가 표시되지 않았을까? Why?

  • 와일드카드 * 기호는 "파일명에 있는 어떤 글자라도 해당된다" 라는 의미를 가지고 있다.

 

* 기호가 쉘이 그것을 이해하고 수행하는 이유는? Why?

  • 쉘이 echo 명령어가 실행되기 전에 * 기호를 다른 무언가로 확장시킨다는 것이다.
  • 위의 실행된 명령어로는 현재 디렉토리의 있는 모든 디렉토리의 이름으로 확장시켰다.

 

 

경로명 확장

# D로 시작한 파일명
iseungmin@iseungmin-ui-MacBookAir  ~  echo D*                                                                    
Desktop Documents Downloads

# c로 끝나는 파일명
iseungmin@iseungmin-ui-MacBookAir  ~  echo *c                                                                    
Music Public

# /usr/과 /usr/???/share 사이에 있는 모든 파일명
iseungmin@iseungmin-ui-MacBookAir  ~  echo /usr/*/share                                                          
/usr/X11/share /usr/X11R6/share /usr/local/share

##### 숨김 파일의 경로명 확장
$ ls -d .[^.]?*

 

틸드 (~) 확장

: ~ 기호가 맨 앞에 있다면, 지정된 사용자의 홈 디렉토리명을 나타낸다 (cd 명령어때 공부 했음) . 그렇다면 echo 명령어를 사용하면 어떻게 출력될까

  • echo ~ : 사용자의 홈 디렉토리 경로를 출력
 iseungmin@iseungmin-ui-MacBookAir  ~  echo ~                                                                   
/Users/iseungmin

 

산술 확장

: 쉘에서는 산술식 확장이 가능하다. 즉, 쉘 프롬프트를 계산기처럼 사용할 수 있다는 의미이다.

  • echo $(산술식) : 산술식 끼리 항상 괄호를 입력해줘야 한다. 또한, 연산을 수행할 때마다 $() 기호를 입력해야 연산을 수행한다.
 iseungmin@iseungmin-ui-MacBookAir  ~  echo $((2+2))                                                              
4

 iseungmin@iseungmin-ui-MacBookAir  ~  echo $(($((5**2)) * 3 ))                                                  
75

 

 

중괄호 확장

: 중괄호 안에 표현된 패턴과 일치하는 다양한 텍스트 문자열을 만들 수 있다.

 

$ echo Front-{A, B, B}-Back
Front-A-Back Front-B-Back Front-C-Back

$ echo NUmber_{1..5}
NUmber_1 NUmber_2 NUmber_3 NUmber_4 NUmber_5

 

 

매개변수 확장

: 예를 들면, USER라고 하는 변수는 사용자명을 가지고 있다. 아래의 명령어를 입력해서 알아보자.

 

 iseungmin@iseungmin-ui-MacBookAir  ~  echo $USER                                                               
iseungmin

 

만약 변수명을 잘못 입력하면 확장은 되지만, 빈 문자열을 반환해 준다.

 

 

명령어 치환

: 명령어의 치환으로 명령어의 출력 겨로가를 확장으로 사용할 수 있다.

 

 iseungmin@iseungmin-ui-MacBookAir  ~  echo $(ls)                                                                 
Ably Applications Brewfile Desktop Documents Downloads Library Movies Music Pictures Postman Public PycharmProjects Virtual Machines.localized ant_community_backend_fastapi ls-output.txt node_modules opt package-lock.json package.json project_server react-app

 

 

 

따옴표 활용 (Quoting)

: 쉘의 다양한 확장 방법들을 제어하는 역할을 하는 것이 따옴표 이다.

 

쌍 따옴표 기호

: 쌍 따옴표 기호로 텍스트를 묶으면 쉘에서 사용하는 모든 특수한 기호들이 가진 의미가 없어지고 대신 일반적인 문자들로 인식된다. ($, \, ' 예외)

 

$ ls -l two words.txt
# two와 words.txt 따로따로 구분해서 ls 명령어를 실행한다.

$ ls -l "two words.txt"
# two words.txt라는 파일을 지명할 수 있다.

 

 

따옴표 기호

: 모든 확장을 숨겨야 한다면 따옴표 기호를 사용하면 된다.

-> 말 그대로 따옴표 안에 있는 명령어 또는 기호들은 다 텍스트로 출력된다.

 

 

이스케이프 문자

: 하나의 문자를 인용하고 싶을때 사용된다. \ 기호를 사용한다.

 

# 확장을 막기위해서도 이스케이프 문자 (\)를 사용한다.
iseungmin@iseungmin-ui-MacBookAir  ~  echo "The balance for user $USER is: \$5.00"                              
The balance for user iseungmin is: $5.00

# 백슬래시 기호를 사용하고 싶으면 \\ 이런식으로 사용하면 된다.