매개변수 확장 시 따옴표를 올바르게 처리합니다.

매개변수 확장 시 따옴표를 올바르게 처리합니다.

기본값을 사용하고 IFS고려하십시오.

unset var
set -- ${var:-"hello"}
echo "$#"

1이는 매개변수 확장이 단일 문자열로 확장될 때 인쇄됩니다 hello.

unset var
set -- "${var:-"hello"}"
echo "$#"

이것도 1같은 이유로 출력됩니다.

그러나 ksh93다음은 사용된 경우 3while dash, bash및 출력을 pdksh출력 합니다 .zsh1

unset var
set -- "${var:-" hello "}"
echo "$#"

ksh93경우 3합계 "$@"는 두 개의 빈 문자열이고 합계는 측면에 공백이 없는 문자열 $1입니다 . 확장된 명령은 다른 쉘 에 있는 것으로 보입니다 .$3$2helloset -- "" hello ""ksh93set -- " hello "

관련 (내 생각에) 질문은 다음과 같습니다.

unset var
set -- ${var:-""}
echo "$#"

1출력되는 위치를 sh제외하고 모든 유사한 쉘에서 출력됩니다 . 에서는 필드 분할을 수행하기 전에 빈 문자열에서 따옴표가 제거된 것으로 나타납니다.ksh930ksh93

ksh93POSIX에서 확장 등을 수행해야 한다고 말하는 방식으로 동작이 설명되고 지원됩니까?

셸 간에 동작이 다른 두 가지 예 중 마지막 경우는 개인적으로 버그라고 생각합니다(명령은 가 아닌 에서 set -- ${var:-""}로 확장 되어야 함 ). 그러나 첫 번째 예에서는( Sure.set -- ""set --set -- "${var:-" hello "}"


테스트를 위해 ksh93OpenBSD 6.4에서는 "Version AJM 93u+ 2012-08-01"을 사용하고, 쉘의 현재 개발 버전인 "Version A 2017.0.0-devel-2040-g36a76aca"를 사용하고 있습니다.

관련 정보