shell command 확장과 명령어 치환
Computer Science/OpenSource+Git

shell command 확장과 명령어 치환

#Expansions and Substitutions

- 리눅스에서 command를 실행하기 전, bash는 command line에 문법적 요소가 있는지 확인한다.

- bash는 special element(keyword, metacharacter)등을 스캔하고 번역하여 새로운 command line에 결과를 낸다.

- 이는 new text로 expanded(확장), substituted(치환)되었다고 한다.

 

- Bash는 다음과 같은 순서로 확장과 치환을 실행한다.

1) Brace Expansion

2) Tilde Expansion

3) Parameter Expansion

4) Arithmetic expansion

5) Command Substitution

6) Filename Expansion (Globbing)

 

 

#Brace Expansions

: Brace Expansion은 임의의 string을 생성하기 위해 사용된다.

- prefix와 suffix에 들러싸인 모든 조합의 string이 생성된다.

- 반드시 같은 type에서만 brace expansion을 사용할 수 있다. {5..k} 이런 식으로 사용할 수 없다.

 

- brace expansion을 여러가지 방법으로 조합할 수 있다.

다음과 같은 방식으로 많이 사용된다.

 

# Tilde Expansion

: tilde는 ~를 의미하는 스페인어이며, 여러가지 특정 pathname을 확장하기 위해 사용한다.

1) ~ : HOME variable의 값을 확장하기 위해 사용한다

2) ~+ : PWD variable의 값을 확장하기 위해 사용한다.

3) ~- : OLDPWD의 값을 확장하기 위해 사용한다.

 

즉, 위의 환경변수의 값 대신 사용할 수 있는 것이다.

 

 

#Parameter Expansion

: $parameter, ${parameter} 등 $변수명 으로 변수에 접근한다. {}로 접근하면 덜 애매함

 

- parameter가 unset이거나 null일때 default value를 설정할 수 있다.

 

- Command Substitution

: command expansion은 command의 output값으로 확장되어 출력된다. 

-> 이 command들은 subshell에서 실행되며, stdout data들이 확장된 결과이다.

- parameter expansion하고 헷갈리면 안된다. 이건 소괄호로만 실행됨

- 그리고 중첩이 있을때에는 ``를 사용해선 안되고, $를 사용해야 한다.

 

- Arithmetic Expansion

: 산술식을 확장하여 결과로 출력해준다.

- $((expression)) 으로 사용하며, 소괄호를 두번 사용한다.

 

 

+) Expansion Substitution using $

: $를 사용하는 확장 방식이 세개가 있으므로, 사용에 따라 괄호를 달리해야 함을 기억하자.

x++는 후위계산이므로 당장 그때는 반영되지 않고, 다음에 반영됨.

 

# Filename Expansion

1) * 는 모든 문자열(zero 포함)과 match되는 wildcard이다.

2) ? 는 모든 single 문자와 match된다.

3) [ ] 는 모든 [ ]안의 어떤 문자든 하나와 match된다.

   [^set},[!set]: set 안의 어떤 문자와도 matching이 되면 안된다.

 

 

+) filename expansion []는 brace expansion {} 다음에 수행된다.

=> [ ]는 안에 -, {}는 안에 ..를 사용한다.

brace expansion이 먼저 수행되므로 오류가 주루룩 발생하고 그 다음에야 원하는 값이 출력된다.

 

 

#Metacharacter

: shell에서 특별한 의미를 갖고 있는 기호들이다. 

 

 

#Quotes

: 특별한 특수기능을 없애는 escape기능을 한다고 할 수 있다.

1) 만약 문장이 기호로 띄어져있을때 ""로 묶어줌으로써 결합이 가능하다.

2) metacharacter의 역할을 하는 single character의 특별한 기능을 없애려 사용한다.

- quote에는 특정한 rule이 존재한다.

1) character escaping : '\'기호를 붙여준다.

2)  ' ' : 작은따옴표는 모든 기능을 없앤다.

3) " " : 큰 따옴표 또한 기능을 없애지만, parameter expansion과 command expansion은 예외로 한다.

bash expansion등을 escape하는 것을 확인할 수 있다.

 

 

 

 

 

 

 

작은따옴표는 parameter expansion, command substitiution까지 모두 bypass하지만 큰따옴표는 그렇지 않다.

'Computer Science > OpenSource+Git' 카테고리의 다른 글

Pipe and Shell Scripts  (0) 2021.12.11
Linux Command and Redirection  (0) 2021.12.11
Shell Environment  (0) 2021.12.11
Git Branch Command  (0) 2021.10.24
Git Version Control Command  (0) 2021.10.24