Processing math: 0%
본문 바로가기
Linux/shell

[Shell] command substitution

by ds31x 2023. 10. 1.
728x90
반응형

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