확장이란?

명령어를 입력하고 실행하기 전에 쉘이 해당 명령어 텍스트에 몇 가지 프로세스를 적용한다.

앞서 와일드카드처럼 * 을 통해 여러 의미를 주는 경우도 이와 같다.

이러한 프로세스들을 확장이라고 하는데, 이를 통해 우리는 다양한 명령어들을 수행할 수 있다.


경로명 확장

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

+ Recent posts