Linux/Shell Script

[Shell Script] Quotes - 2

비번변경 2022. 6. 7. 21:22

2022.06.04 - [Shell Script] Quotes - 1에 이어서 작성한다.

 

 

Single quotes ' '

모든 문자를 그대로 표시하며 escape도 되지 않는다. 

single quotes

따옴표로 감싼 문자열 내에서 따옴표를 입력할 때는 아래와 같은 방법으로 입력한다.

  • no quotes 상태에서 ' escape
  • '를 쌍따옴표로 감싸기
echo 'test'\''test'
echo 'test'"'"'test'

single quotes 내 ' 입력

 

Single quotes 사용이 필요한 경우

1. Command String 사용 시

큰따옴표를 사용하면 작성 당시 변숫값이 확장되어 정의되므로 실행 시 의도대로 동작하지 않을 수 있다.

single command

2. Trap Handler 사용 시

3. Prompt 설정

 

 

$' '

escape를 사용할 수 있는 single quotes와 동일하다. escape 문자가 처리된 후에는 $가 제외된 ' ' 상태가 된다.

sh에서는 사용할 수 없다.

foo=$'aaa\nbbb'
echo "$foo"

$''

echo -e 옵션을 사용하지 않아도 escape 문자가 처리되어 출력된다.

 

printf %q

%q 지정자는 명령에 사용되는 인수나 명령문 전체를 다른 명령으로 올바르게 전달할 수 있게 escape 해준다.

arg=$( printf "%q " "$( echo -e "foo? bar\n*bar[3]" )" )
echo $arg

arg=$( printf "%q " "$( echo -e "foo bar\n*zoo[3]" )" )
echo $arg

printf %q

문자열에 escape 문자가 포함되면 $' ' 형태로 출력된다.

 

Quotes를 분리해서 작성하는 경우

중간의 공백은 하나의 space로 변경된다.

Quotes 분리 시 공백 처리

 

 

Quotes를 붙여 사용하기

두 개의 quotes를 공백을 두지 않고 붙여 사용하면 하나의 인수가 된다. 변수를 포함하는 명령 스트링을 만들 거나 명령에 전달할 인수를 하나로 만들 때 유용하다.

 

명령 스트링을 만들 때

' '를 사용한 명령문 내에 변수를 사용해야 할 때에는 ' '를 분리한 후 double quotes 처리한 변수를 공백 없이 붙여 사용하면 된다.

# 예시
sed -E 's/'"$var1/$var2"'/g'

 

명령의 인수를 만들 때

두 quotes를 붙여서 사용하면 하나의 인수로 취급된다.

$ ./args.sh 11 "hello "$'$world \u2665' 33           # $' ' quotes 을 사용

$0 : ./args.sh
$1 : 11
$2 : hello $world ♥
$3 : 33

 

 

참고 문서

https://mug896.github.io/bash-shell/quotes.html

 

 

 

728x90