Shell 매개변수 확장(Parameter Expansion)
Shell에서 매개변수 확장(Parameter Expansion)은 변수의 값을 조작하거나 대체하는 기능을 제공합니다. 매개변수 확장은 다양한 형식과 옵션으로 사용할 수 있으며, 가장 일반적인 형식은 다음과 같습니다
1. ${변수명} : 변수의 값을 출력합니다.
예를 들어, name="John"이라고 가정하면, ${name}은 "John"으로 확장됩니다.
2. ${변수명:-기본값} : 변수의 값을 출력하되, 변수가 정의되어 있지 않으면 기본값을 출력합니다.
예를 들어, name="John"이라고 가정하면, ${age:-25}는 만약 age 변수가 정의되어 있지 않으면 "25"로 확장됩니다.
3. ${변수명:=기본값} : 변수의 값을 출력하되, 변수가 정의되어 있지 않으면 기본값을 할당하고 출력합니다.
예를 들어, name="John"이라고 가정하면, ${age:=25}는 만약 age 변수가 정의되어 있지 않으면 "25"로 할당되고 출력됩니다.
4. ${변수명:?에러메시지} : 변수의 값을 출력하되, 변수가 정의되어 있지 않으면 에러 메시지를 출력합니다.
예를 들어, name="John"이라고 가정하면, ${age:?Age is not set}는 만약 age 변수가 정의되어 있지 않으면 Age is not set이라는 에러 메시지를 출력합니다.
5. ${변수명:길이} : 변수의 값을 출력하되, 길이만큼 문자를 자릅니다.
예를 들어, name="John"이라고 가정하면, ${name:2}는 "hn"으로 확장됩니다.
6. ${변수명#패턴} : 변수의 값을 출력하되, 패턴과 일치하는 가장 짧은 부분을 제거합니다.
예를 들어, file="path/to/file.txt"이라고 가정하면, ${file#*/}는 "to/file.txt"로 확장됩니다.
7. ${변수명##패턴} : 변수의 값을 출력하되, 패턴과 일치하는 가장 긴 부분을 제거합니다.
예를 들어, file="path/to/file.txt"이라고 가정하면, ${file##*/}는 "file.txt"로 확장됩니다.
8. ${변수명/패턴/치환} : 변수의 값을 출력하되, 첫 번째로 일치하는 패턴을 치환합니다.
예를 들어, name="John Doe"이라고 가정하면, ${name/John/Jane}은 "Jane Doe"로 확장됩니다.
이 외에도 다양한 매개변수 확장 형식과 옵션을 사용할 수 있으며, shell의 종류와 버전에 따라 조금씩 다를 수 있습니다. Shell 매뉴얼에서 "Parameter Expansion"을 찾아보면 더 많은 정보를 얻을 수 있습니다.
문자 | 설명 |
${parameter:-word} | Parameter(매개변수)가 설정되지 않거나 null이면 word 확장이 대체됩니다. 그렇지 않으면 매개변수의 값이 대체됩니다. |
${parameter:=word} | Parameter(매개변수)가 설정되지 않거나 null이면 word 확장이 매개변수에 할당됩니다. 그런 다음 매개변수의 값이 대체됩니다. 이러한 방식으로 위치 매개변수 및 특수 매개변수를 할당할 수 없습니다. |
${parameter:?word} | Parameter(매개변수)가 null이거나 설정되지 않은 경우 word의 확장(또는 단어가 없는 경우 해당 효과에 대한 메시지)이 표준 오류에 기록되고 쉘이 대화형이 아닌 경우 종료됩니다. 그렇지 않으면 매개변수의 값이 대체됩니다. |
${parameter:+word} | Parameter(매개변수)가 null이거나 설정되지 않으면 아무 것도 대체되지 않고, 그렇지 않으면 word 확장이 대체됩니다. |
${parameter:offset} | |
${parameter:offset:length} |
참고URL
- https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
- https://blog.gaerae.com/2015/01/bash-hello-world.html
- https://mug896.github.io/bash-shell/exp_and_sub/parameter_expansion.html
'리눅스' 카테고리의 다른 글
리눅스에서 LVM으로 구성된 ROOT(centos-root) 파티션을 확장 (0) | 2022.01.20 |
---|---|
교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS) (0) | 2022.01.19 |
ab(Apache Bench) tools (0) | 2022.01.17 |
우분투에서 HAProxy-WI를 설치하고 설정하는 방법 (0) | 2022.01.12 |
[draft] NGINX와 PHP-FPM을 연동하여 PHP 스크립트를 처리하는 방법 (0) | 2022.01.12 |