(예를 들어 ${varname-default}
) 변수 확장을 위해 기본값이 제공되면 구성된 문자는 어떻게 default
해석됩니까?
'
순진하게 말하면 변수 대체(예: $b)와 따옴표 같은 문자 확장 , "
, 이 경우에 발생할 것이라고 추측합니다 \
... 그러나 따옴표 같은 문자 확장이 항상 발생하는 것은 아닌 것 같습니다.
예를 들어,
> echo x${a-''}y
xy
하지만
> echo x"${a-''}"y
x''y
나는 두 경우 모두에서 xy
및 같은 확장 변수의 생성자가 잘 작동할 것이라고 예상했습니다.${a-$PATH}
( BRACE='}'; echo ${a-$BRACE} )
그러나 GNU bash, version 4.4.19(1)-release
... 두 버전의 최신 버전은 문자 그대로 두 번째 예제의 출력에 포함된 mksh
동일한 동작을 갖습니다 .''
답변1
몇 가지 확장이 있습니다 ${parameter:-[word]}
:
~에서남자 난교:
아래의 각 경우에,단어물결표 확장, 매개변수 확장, 명령 대체 및 산술 확장이 가능합니다.
~에서POSIX 사양:
단어물결표 확장, 매개변수 확장, 명령 대체 및 산술 확장을 수행해야 합니다.
둘 다 동일하게 보고하고 둘 다 수행함포함되지"참조 삭제".
따옴표가 제거되었습니다.뒤쪽에전체 변수 확장이 완료되었습니다. 그러나 이것이 어떻게 수행되는지 정확하게 보여주기는 어렵습니다.
$ sh
$ unset b
$ set -x
+ set -x
$ echo 1 ${b-e}
+ echo 1 e
1 e
$ echo 2 ${b-"e"}
+ echo 2 e
2 e
$ echo 3 ${b-'e'}
+ echo 3 e
3 e
$ echo 4 "${b-e}"
+ echo 4 e
4 e
$ echo 5 "${b-"e"}"
+ echo 5 e
5 e
$ echo 6 "${b-'e'}"
+ echo 6 'e'
6 'e'
$ set +x
+ set +x
또는:
$ $ set -x; echo 1 x${b-e}y; echo 2 x${b-"e"}y; echo 3 x${b-'e'}y; echo 4 "x${b-e}y"; echo 5 "x${b-"e"}y"; echo 6 "x${b-'e'}y"; set +x
+ echo 1 xey
1 xey
+ echo 2 xey
2 xey
+ echo 3 xey
3 xey
+ echo 4 xey
4 xey
+ echo 5 xey
5 xey
+ echo 6 x'e'y
6 x'e'y
+ set +x
$