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
'Linux > shell' 카테고리의 다른 글
[Bash] File과 directory 관련 command (0) | 2024.05.20 |
---|---|
[Bash] shell 기본 : 변수 설정 및 반복구문 (0) | 2023.07.19 |