在玩一个shell脚本时,我发现了一个令人惊讶的行为。假设下面的片段:
set -u
output()
{
echo "$*"
}
output我用bash、ksh93、mksh、zsh、dash和pdksh测试了这个片段。除了pdksh之外,所有这些都按预期的方式工作。
Pdksh抱怨*: parameter not set。
嗯,pdksh (有点)是对的。output没有参数,因此没有设置$*。
我通过用$*替换${*:-}来解决这个问题。
${*:-}有效吗?关于Schilys答复的评论引发的更新:
@(#)PD KSH v5.2.14 99/07/13.2 -相当古老。发布于 2020-04-24 07:06:34
首先:$*和$@反映当前的参数( arg向量),因此根据定义,set -u永远不会处于unset的状态,因此D3不能影响这些变量。
在以前,更多的shell存在这种问题,${*:-}解决方案并不少见。
众所周知,pdksh存在缺陷,并且不再作为自己的项目积极维护,所以不要指望bug会被修复。
mksh (来自MirBSD的外壳)是pdksh的一个固定的和积极维护的变体,它是可移植的,因此可以在许多平台上使用。托斯滕·格拉泽在这里做得很好。
https://unix.stackexchange.com/questions/582172
复制相似问题