Kus*_*nda 5 ksh posix variable-substitution
使用 的默认值IFS
,考虑
unset var
set -- ${var:-"hello"}
echo "$#"
Run Code Online (Sandbox Code Playgroud)
1
当参数扩展扩展为单个 string 时会打印hello
。
unset var
set -- "${var:-"hello"}"
echo "$#"
Run Code Online (Sandbox Code Playgroud)
这也是1
出于同样的原因输出。
然而,如果使用ksh93
以下产出3
而dash
,bash
,pdksh
,和zsh
输出1
。
unset var
set -- "${var:-" hello "}"
echo "$#"
Run Code Online (Sandbox Code Playgroud)
在这种ksh93
情况下, one get3
和"$@"
是两个空字符串,$1
而$3
while$2
是hello
没有侧翼空格的字符串。扩展命令似乎是set -- "" hello ""
在ksh93
和set -- " hello "
其他外壳。
一个相关的(我相信)问题是
unset var
set -- ${var:-""}
echo "$#"
Run Code Online (Sandbox Code Playgroud)
该输出1
在所有sh
样壳,除了在ksh93
其中它输出0
。在 中ksh93
,在执行字段拆分之前,引号似乎已从空字符串中删除。
可以ksh93
通过 POSIX 如何说明应该执行扩展等来解释和支持该行为吗?
对于 shell 之间的行为不同的两个示例中的最后一个,我个人认为这是一个错误(命令应该从set -- ${var:-""}
to展开set -- ""
,而不是 to set --
),但是对于第一个这样的例子(带有 的那个set -- "${var:-" hello "}"
),我不太确定。
为了进行测试,ksh93
我在 OpenBSD 6.4 上使用“AJM 93u+ 2012-08-01 版”,以及“A 版 2017.0.0-devel-2040-g36a76aca”,这是 shell 的当前开发版本。
归档时间: |
|
查看次数: |
97 次 |
最近记录: |