확장과 인용
커맨드라인에서 엔터(Enter)를 입력할 때 발생하는 ‘마법’에 대해 알아보자
확장
- 명령어를 입력하고 엔터키를 누르면 bash는 그 명령어를 수행하기 전에 텍스트에 몇 가지 프로세스를 진행한다.
- 이러한 프로세스를 “확장”이라 한다.
echo 명령어
: 쉘 비트인으로, 표준 출력상에 해당 텍스트 인자를 표시.
example
- [me@linuxbox ~]$ echo this is a test
-
this is a test
- [me@linuxbox ~]$ echo *
- Desktop Documents ls-output.txt Music Pictures Public Templates Videos
왜 * 기호가 표시되지 않을까? -> 엔터키를 눌렀을 때, * 기호 그 자체를 출력하지 않고 그 확장된 결과만을 보여준다.
- ‘*’ : 파일명에 있는 어떤 글자라도 해당된다.
# 경로명 확장 와일드카드로 동작하는 방식을 “경로명 확장”
- [me@linuxbox ~]$ ls
- Desktop ls-output.txt Pictures Templates Documents Music Public Videos
- [me@linuxbox ~]$ echo D*
- Desktop Documents
틸드(~) 확장
- ~ 기호 문자는 특별한 의미를 가지고 있다.
- 이 기호가 맨 앞에 있다면, 지정된 사용자의 홈 디렉토리명을 나타낸다.
-
이름을 지정하지 않으면 현재 사용자의 홈 티렉토리 명을 나타낸다.
- [me@linuxbox ~]$ echo ~
- /home/me
- [me@linuxbox ~]$ echo ~foo
- /home/foo
산술 확장
- 쉘에서는 산술식 확장이 가능하다.
-
$( (expression) )
- [me@linuxbox ~]$ echo $((2 + 2))
- 4
중괄호 확장
-
중괄호 안에 표현된 패턴과 일치하는 다양한 텍스트 문자열을 만들 수 있다.
- [me@linuxbox ~]$ echo Front-{A,B,C}-Back
-
Front-A-Back Front-B-Back Front-C-Back
-
프리앰블은 중괄호({}) 앞에 있는 부분을 말하며, 포스트스크립트는 중괄호({}) 뒤에 있는 부분을 말합니다.
- 중괄호({}) 안에 있는 A, B, C의 각각의 값들이 프리앰블과 포스트스크립트 사이에 삽입되어 다양한 텍스트 문자열이 생성됩니다. 위의 예시에서는 Front-A-Back, Front-B-Back, Front-C-Back라는 세 가지 문자열이 생성된다.
중괄호({})를 사용하여 확장된 패턴은 여러 개의 값을 한 번에 지정하고, 다양한 텍스트 문자열을 생성하는데 유용하게 사용될 수 있다.
매개변수 확장
쉘 스크립트에서 유용한 기능이 바로 매개변수 확장이다. 작은 데이터 덩어리를 저장하고, 각 덩어리마다 이름을 붙이는 시스템 기능과 함께 사용할 때 더 많은 능력을 발휘한다. 이러한 데이터 덩어리를 “변수”라 한다.
- [me@linuxbox ~]$ echo $USER
-
me
- $ 기호를 사용하여 변수를 참조하고, 변수의 이름을 입력하여 해당 변수에 저장된 값을 사용할 수 있다. 예를 들어, $USER는 현재 로그인한 사용자의 이름을 나타난다.
위의 예시에서 echo $USER는 $USER 변수에 저장된 값을 출력하는 명령어입니다. 만약 현재 로그인한 사용자가 “me”라는 이름을 가지고 있다면, me라는 값이 출력될 것입니다.
변수는 쉘 스크립트에서 데이터를 저장하고 사용하는데 유용하며, 다양한 용도로 활용될 수 있다.
따옴표 활용
쉘의 다양한 확장 방법을 알아봤고, 이제는 그것을 제어하는 방법
- [me@linuxbox ~]$ echo this is a test
- this is a test
- [me@linuxbox ~]$ echo “this is a test”
- this is a test
- 쉘이 echo 명령어의 인자에서 불필요한 공백을 삭제하여 단어 분할을 했다.
쌍 따옴표 기호
- 따옴표를 활용한 첫 번째 형태는 ‘쌍 따옴표’이다.
- 쌍 따옴표로 파일명에 있는 공백문제 해결가능
- ex.
- [me@linuxbox ~]$ ls -l two words.txt
- ls : cannot access two: No such file or directory
- ls: cannot access words .txt : No such file or directory
- [me@linuxbox ~]$ ls -l “two words.txt”
- -rw-rw-r– 1 me me 18 2012-02 -20 13 :03 two words.txt
서브목차