확장이란?
명령어를 입력하고 실행하기 전에 쉘이 해당 명령어 텍스트에 몇 가지 프로세스를 적용한다.
앞서 와일드카드처럼 * 을 통해 여러 의미를 주는 경우도 이와 같다.
이러한 프로세스들을 확장이라고 하는데, 이를 통해 우리는 다양한 명령어들을 수행할 수 있다.
경로명 확장
echo *
echo 명령어는 쉘 빌트인으로, 넘겨준 텍스트 인자를 표준 출력에 표시해준다.
그렇다면 stdout 에 * 이라는 텍스트가 출력될까?
직접 수행해본다면 꽤 다른 결과가 나오는 것을 알 수 있는데, ls 의 결과물과 같은 텍스트를 출력할 것이다.
와일드카드에서의 * 는 어떤 글자든 상관 없다는 의미를 가지기 때문에, echo * 이라는 명령어가 수행되기 전에 * 이라는 텍스트에서 확장이 일어나면서 텍스트 인자가 바뀌게 된 것이다.
따라서 여기서 echo 명령어는 * 가 아닌 확장된 결과 텍스트를 표준 출력에 표시했다고 보면 된다.
echo [[:upper:]]* # 대문자로 시작하는 모든 파일을 출력
echo *.txt # .txt 로 끝나는 모든 파일을 출력
마찬가지로 다른 다양한 방식으로 경로명 확장이 가능하다.
숨김 파일의 경우는 파일명의 맨 앞에 . 이 붙는데, 이런 경우는 조금 특수하게 처리해 주어야 한다.
단순히 echo .* 과 같이 .으로 시작하는 모든 파일을 가져올 경우 현재 디렉토리를 의미하는 . 과 상위를 의미하는 .. 도 출력한다.
숨김 파일들만 보기 위해서는 아래와 같이 와일드카드를 사용할 수 있다.
echo .[!.]?* # 마침표로 시작하고, 두번째는 마침표를 포함시키지 않으면서 하나 이상의 문자가 있어야 함
산술 확장
쉘에서는 조금 단순한 계산기와 같은 산술식들에 대한 확장도 지원하고 있다.
산술 확장은 $( ( 산술식 ) ) 과 같은 형태로 표현하는데, 연산자는 6가지를 지원하고 있다.
연산자 | 설명 |
---|---|
+ | 더하기 |
- | 빼기 |
* | 곱하기 |
/ | 나누기(몫) |
% | 모듈러(나머지) |
** | 거듭제곱 |
산술식 안에서 띄워쓰기의 형태는 상관 없고, 여러 연산자들을 중첩하여 사용할 수 있다.
echo 100 * 100 * 100 + 5 == $((100**3 + 5))
중괄호 확장
중괄호는 반복된 패턴을 나타내는, 반복문과 비슷하게 작동하는 확장 개념이다.
Preamble 이라고 부르는 앞부분과 Postscript 라고 부르는 뒷부분을 가져 특정 범위나 패턴을 표현한다.
중괄호 안에는 빈 칸을 허용하지 않으며, 중괄호 내에 또다른 중괄호 확장이 가능하다.
echo Hi{1,2,3,4,5} # Hi1 Hi2 Hi3 Hi4 Hi5
echo Hi{1..5} # 위와 같음
echo {A..Z} # A B C D ... Y Z
echo {0{0,1},1{0,1}} # 00 01 10 11
매개변수 확장
자바를 설치하고 나서 환경 변수에 자바 경로를 넣어준 경험이 있을 것이다.
그렇게 시스템에는 다양한 변수들이 이미 존재하고 있기도 한데, 터미널에서 printenv 를 통해 직접 확인해볼 수 있다.
echo $USER # 사용자명
echo $PATH # 환경변수들의 경로
이런 매개변수들 뿐만 아니라 명령어의 결과를 확장에 사용할 수도 있다.
물론 넘겨주는 명령어에도 다양한 확장을 써서 결과를 뽑아내기도 한다.
echo * # 경로 확장
echo $(ls) # 명령어를 치환해서 출력
echo $(echo *) # 다 같은 결과!
'STUDY > Linux' 카테고리의 다른 글
[리눅스] 커맨드라인 키보드 기법 (0) | 2021.07.01 |
---|---|
[리눅스] 확장 제어 (0) | 2021.06.30 |
[리눅스] 파이프라인 (0) | 2021.01.27 |
[리눅스] 리다이렉션 (0) | 2021.01.25 |
[리눅스] 명령어 알아보기 (0) | 2021.01.23 |