#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 $
: $를 사용하는 확장 방식이 세개가 있으므로, 사용에 따라 괄호를 달리해야 함을 기억하자.
# Filename Expansion
1) * 는 모든 문자열(zero 포함)과 match되는 wildcard이다.
2) ? 는 모든 single 문자와 match된다.
3) [ ] 는 모든 [ ]안의 어떤 문자든 하나와 match된다.
[^set},[!set]: set 안의 어떤 문자와도 matching이 되면 안된다.
+) filename expansion []는 brace expansion {} 다음에 수행된다.
=> [ ]는 안에 -, {}는 안에 ..를 사용한다.
#Metacharacter
: shell에서 특별한 의미를 갖고 있는 기호들이다.
#Quotes
: 특별한 특수기능을 없애는 escape기능을 한다고 할 수 있다.
1) 만약 문장이 기호로 띄어져있을때 ""로 묶어줌으로써 결합이 가능하다.
2) metacharacter의 역할을 하는 single character의 특별한 기능을 없애려 사용한다.
- quote에는 특정한 rule이 존재한다.
1) character escaping : '\'기호를 붙여준다.
2) ' ' : 작은따옴표는 모든 기능을 없앤다.
3) " " : 큰 따옴표 또한 기능을 없애지만, parameter expansion과 command expansion은 예외로 한다.
'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 |