반응형

목차

  1. 따옴표
  2. 백슬래시
  3. 중괄호
  4. 파이프

따옴표

작은따옴표(' ')
작은따옴표는 따옴표 안에 있는 각 문자의 리터럴 값을 보존한다. 즉, 변수 대체 또는 특수 문자 해석이 발생하지 않다.

$ var="world"
$ echo 'Hello $var'

Output
Hello $var (이 경우 셸은 $var 변수를 해석하지 않으며 출력은 리터럴 문자열 "Hello $var"다.)

큰따옴표(" ")
큰따옴표는 공백 및 기타 특수 문자를 유지하면서 특정 특수 문자(예: $, ` 및 )의 변수 대체 및 해석을 허용한다. 

$ var="world"
$ echo "Hello $var"

Output
Hello world (여기서 쉘은 $var 변수를 해석하고 출력에서 ​​해당 값을 대체한다.)

백슬래시(\)

백슬래시는 다음 문자의 특별한 의미를 억제하기 위한 이스케이프 문자로 사용된다. 예를 들어 큰따옴표 문자열 안에 리터럴 달러 기호($) 또는 큰따옴표(")를 포함하려는 경우 백슬래시를 사용할 수 있다.

$ var="world"
$ echo "Hello \$var"

Hello $var (이 경우 백슬래시가 달러 기호를 이스케이프하여 변수 대체를 방지한다.)
$ echo "This is a \"quote\" within a quote."

Output
This is a "quote" within a quote.
(여기에서 백슬래시는 내부 큰따옴표를 이스케이프하여 출력에서 ​​리터럴 문자로 처리되도록 한다.)

백슬래시는 이외에도 줄을 바꿔줄 때도 사용할 수 있다. 즉, 입력을 하다 끝에 ' \ '를 입력하고 엔터를 치면 이어서 작성할 수 있다.

$ echo 'hello world, everything will be okey \
have a nice day reader.'

Output
hello world, everything will be okey have a nice day reader.

중괄호 {}

Linux에서 중괄호 {}는 단일 표현식으로 여러 문자열 또는 패턴을 생성하는 메커니즘인 중괄호 확장을 만드는 데 사용된다. 중괄호 확장은 시퀀스를 생성하거나 여러 파일에서 배치 작업을 수행하는 데 유용하다.

$ echo file{1,2,3}.txt

Output
file1.txt file2.txt file3.txt
(이 예에서 중괄호 확장은 중괄호 안에 1, 2 및 3 값을 대체하여 세 개의 개별 문자열을 생성한다.)

중괄호 확장은 범위와 함께 사용할 수도 있다.

$ echo file{1..5}.txt

Output
file1.txt file2.txt file3.txt file4.txt file5.txt
(이 경우 중괄호 확장은 '1'에서 '5'까지의 숫자 범위를 반복하여 5개의 문자열 시퀀스를 생성한다.)

문자와 함께 중괄호 확장을 사용할 수도 있다.

$ echo file{a..d}.txt

Output
filea.txt fileb.txt filec.txt filed.txt

중괄호 확장을 결합하고 중첩하여 더 복잡한 패턴을 생성할 수 있다.

$ echo {A,B}{1..3}

Output
A1 A2 A3 B1 B2 B3
(이 예에서 중괄호 확장은 'A' 및 'B' 값을 '1'에서 '3'까지의 숫자와 결합하여 6개의 문자열을 생성한다.)

중괄호 확장은 종종 cp, mv 또는 mkdir과 같은 명령과 함께 사용되어 여러 파일 또는 디렉토리에서 작업을 수행한다.

$ mkdir project{1,2,3}
(이 명령은 project1, project2 및 project3이라는 세 개의 디렉토리를 만든다.)

이중 중괄호 {{ }}

이중 중괄호 {{ }}는 그 자체로 특별한 의미나 기능을 갖지 않는다. 그러나 일반적으로 Ansible, Jinja2 또는 Mustache와 같은 다양한 구성 관리 및 템플릿 도구와 함께 구성 파일 또는 템플릿에 사용된다.

이러한 도구는 이중 중괄호를 사용하여 변수 대체를 위한 자리 표시자를 나타내거나 구성 파일 또는 템플릿을 처리하는 동안 평가하고 해당 값으로 대체해야 하는 표현식을 지정한다.

  • 간단한 Ansible 플레이북 playbook.yml 예시
---
- hosts: localhost
  tasks:
    - name: Display a message with a variable
      debug:
        msg: "Hello, {{ name }}!"

이 플레이북에서는 이중 중괄호 {{ }}를 사용하여 name이라는 변수를 나타낸다. 이 플레이북이 실행되면 Ansible은 {{ name }}을 변수 name의 값으로 바꾼다.

이제 변수 정의가 포함된 vars.yml 파일을 만든다.

---
name: "world"

다음 명령을 사용하여 Ansible 플레이북을 실행할 수 있다.

$ ansible-playbook -i localhost, -c local -e @vars.yml playbook.yml

실행시 출력 메시지

PLAY [localhost] ***************************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [Display a message with a variable] ***************************************
ok: [localhost] => {
    "msg": "Hello, world!"
}

PLAY RECAP *********************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

출력에서 플레이북의 {{ name }} 자리 표시자가 name 변수의 값인 "world"로 대체된 것을 볼 수 있다.

파이프 |

한 명령의 출력을 다른 명령의 입력으로 보내는 과정인 파이핑에 파이프 기호(|)를 사용한다. 이를 통해 임시 파일 없이 강력한 명령 체인을 생성하고 데이터를 보다 효율적으로 처리할 수 있다.

다음과 같은 과일 목록이 포함된 fruits.txt라는 파일이 있다고 가정한다.

apple
banana
orange
grape
watermelon

이름이 5자 이상인 과일의 총 개수를 찾으려고 한다. grep, wc 및 파이프 기호 |의 조합을 사용하여 이를 달성할 수 있다.

$ cat fruits.txt | grep -E '^.{6,}$' | wc -l

이 예에서는 다음 명령을 사용하고 해당 출력을 파이프한다.
  • cat fruits.txt
    이 명령은 fruits.txt 파일의 내용을 읽고 파이프 기호(|)를 통해 다음 명령으로 보낸다.

  • grep -E '^.{6,}$'
    이 명령은 문자가 6개 이상인 행만 일치시켜 입력 행을 필터링한다(주어진 정규식 기반). 그런 다음 출력이 다음 명령으로 전달된다.

  • wc -l
    이 명령은 입력된 줄의 수를 세는데, 이는 이름이 5자보다 긴 과일의 수에 해당한다.

 

이 명령 체인의 최종 출력은 '2'이며 이름이 5자보다 긴 과일(오렌지 및 수박)의 총 수이다.


반응형