본문 바로가기
Linux/shell

[Shell] command substitution

by ds31x 2023. 10. 1.

command substitution (명령어치환)

우리나라말로 명령어 치환 이라고 불리며,
특정 명령어의 수행결과를 문자열로 입력받는 형태로 셀프로그래밍 등에서 사용됨.


command substitution 사용법

아래 예제는 result.txt 를 현재 날짜 정보를 붙인 이름으로 변경해준다.

mv result.txt result-$(date +%Y-%m-%d).txt
  • command substitution은 위에서 $(date +%Y-%m-%d) 임.
  • date 명령어에 해당 옵션을 줄 경우 2023-10-01 과 같은 형태의 문자열이 결과로 반환됨.
  • 이를 감싸고 있는 $(명령어) 부분(command)이 해당 문자열로 바뀌어짐(substitution).

command substition은 다음과 같이 여러 단계로 겹쳐서 사용이 가능함.

parent_of_parent_path=$(dirname $(dirname ~))
echo ${parent_of_parent_path}
  • ~ 은 현재 사용자의 홈디렉토리임.
  • dirname 은 뒤에 인자로 주어진 경로의 상위 디렉토리의 경로를 출력해주는 명령어임.
  • 위의 경우 사용자의 홈디렉토리의 상위 디렉토리는 /home 이고, 그 상위 디렉토리는 root / 가 된다.

shell script 의 variable 참조(정확히는 parameter expansion)은 $ 심볼과 함께 curly bracket ({}중가로)을 사용하고

command substitution 은 parentheses (()소가로)를 사용함.

주의할 것은
개행문자 나 공백문자 등의 처리를
유의해야함 (아래 참고자료 확인).
때문에 변수로 할당 후 결과값을 확인하고 나서 사용해야한다.


command substitution의 다른 대안

$(명령어)를 대체할 수 있는 다른 방법으로는 backtick ` 으로 명령어 를 감싼`명령어` 방식이 있다 (old shell에선 이 방법만 동작).

  • 사실 backtick `을 사용하는 이 방법은 여러 단계로 겹쳐서 사용이 안되며 여러 한계로 인해$(명령어) 방식이 이를 대체하였다.
  • 단, 이 backtick `으로 감싸는 방식은 호환성을 위해 여전히 제공되고 있다.

즉, command substitution이 필요하다면 가급적 $(명령어) 를 사용하는게 권장됨.


참고하면 좋은 자료

http://wiki.kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/commandsub.html

 

명령어 치환(Command Substitution)

명령어 치환은 하나나 그 이상의 명령어의 출력을 재할당 해줍니다. 명령어 치환은 말그대로 한 명령어의 출력을 다른 문맥으로 연결해 줍니다. 명령어 치환의 전형적인 형태는 역따옴표(`...`)

wiki.kldp.org

 

'Linux > shell' 카테고리의 다른 글

[Bash] File과 directory 관련 command  (0) 2024.05.20
[Bash] shell 기본 : 변수 설정 및 반복구문  (0) 2023.07.19