기본값을 사용하고 IFS
고려하십시오.
unset var
set -- ${var:-"hello"}
echo "$#"
1
이는 매개변수 확장이 단일 문자열로 확장될 때 인쇄됩니다 hello
.
unset var
set -- "${var:-"hello"}"
echo "$#"
이것도 1
같은 이유로 출력됩니다.
그러나 ksh93
다음은 사용된 경우 3
while dash
, bash
및 출력을 pdksh
출력 합니다 .zsh
1
unset var
set -- "${var:-" hello "}"
echo "$#"
이 ksh93
경우 3
합계 "$@"
는 두 개의 빈 문자열이고 합계는 측면에 공백이 없는 문자열 $1
입니다 . 확장된 명령은 다른 쉘 에 있는 것으로 보입니다 .$3
$2
hello
set -- "" hello ""
ksh93
set -- " hello "
관련 (내 생각에) 질문은 다음과 같습니다.
unset var
set -- ${var:-""}
echo "$#"
1
출력되는 위치를 sh
제외하고 모든 유사한 쉘에서 출력됩니다 . 에서는 필드 분할을 수행하기 전에 빈 문자열에서 따옴표가 제거된 것으로 나타납니다.ksh93
0
ksh93
ksh93
POSIX에서 확장 등을 수행해야 한다고 말하는 방식으로 동작이 설명되고 지원됩니까?
셸 간에 동작이 다른 두 가지 예 중 마지막 경우는 개인적으로 버그라고 생각합니다(명령은 가 아닌 에서 set -- ${var:-""}
로 확장 되어야 함 ). 그러나 첫 번째 예에서는( Sure.set -- ""
set --
set -- "${var:-" hello "}"
테스트를 위해 ksh93
OpenBSD 6.4에서는 "Version AJM 93u+ 2012-08-01"을 사용하고, 쉘의 현재 개발 버전인 "Version A 2017.0.0-devel-2040-g36a76aca"를 사용하고 있습니다.