본문 바로가기

리눅스

Shell 매개변수 확장(Parameter Expansion)

728x90

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

 

728x90