인생은 여행

리눅스 쉘에서 사용하는 백틱(`)에 대한 고찰 본문

카테고리 없음

리눅스 쉘에서 사용하는 백틱(`)에 대한 고찰

산떠 버하둘 2022. 11. 29. 15:44

백틱(backtick)의 정의

IEEE Open Group의 정의에 의하면, 리눅스 쉘에서 백틱은 $()과 함께 명령어 대체(command substitution)로 분류되는 표현식입니다. 백틱 또는 $() 괄호 안에 기술하는 명령어를 하위 쉘이 실행하고 그 출력 결과를 문자열로 대체하여 줍니다.

참고: Shell Command Language

[user1@ip-x-x-x-x ~]$ echo "I am `whoami`"
I am user1
[user1@ip-x-x-x-x ~]$ echo "I am $(whoami)"
I am user1

 

권장 사항

백틱은 오래된 표현법으로 중첩되는 괄호나 이스케이프 문자 관련하여 혼란이 있을 수 있으므로 달러괄호-$() 표현이 권장됩니다.

참고1: Bash scripting: Moving from backtick operator to $ parentheses

참고2: What's the difference between $(stuff) and `stuff`?

주의할 점

명령어 대체는 현재 환경 기준으로 하위 쉘을 통해 수행되므로 만약 둘러싸고 있는 명령이 원격이나 다른 환경에서 실행된다면 서로 다른 환경에서 실행될 수 있다는 점을 유의해야 합니다.

 
[user1@ip-x-x-x-x ~]$ sudo -u root echo "I am `whoami`"
I am user1
[user1@ip-x-x-x-x ~]$ sudo whoami | xargs -I % echo "I am %"
I am root
 

예를 들면, ansible을 통하여 원격 호스트에서 쉘 명령을 수행하려고 할 때, 명령어 대체를 이용하면 대체 명령어는 ansible 호스트에서 수행되고, 그 결과와 함께 편집된 셀 명령이 원격에서 수행됩니다.

 
[user@ansible-server ~]$ ansible -i <inventory 파일> -m shell -a "echo `hostname`"
...
ansible-server
...
ansible-server
...
Comments