首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shell脚本:“设置-u`和`$*‘

shell脚本:“设置-u`和`$*‘
EN

Unix & Linux用户
提问于 2020-04-24 07:03:48
回答 1查看 175关注 0票数 0

在玩一个shell脚本时,我发现了一个令人惊讶的行为。假设下面的片段:

代码语言:javascript
复制
set -u
output()
{
    echo "$*"
}
output

我用bash、ksh93、mksh、zsh、dash和pdksh测试了这个片段。除了pdksh之外,所有这些都按预期的方式工作。

Pdksh抱怨*: parameter not set

嗯,pdksh (有点)是对的。output没有参数,因此没有设置$*

我通过用$*替换${*:-}来解决这个问题。

  • 你说得对吗?过分挑剔还是错误?
  • 解决方案${*:-}有效吗?

关于Schilys答复的评论引发的更新:

  • 我在Fedora 31上,在某个地方捡到pdksh,不是通过包管理器安装的
  • pdksh版本是@(#)PD KSH v5.2.14 99/07/13.2 -相当古老。
  • 在测试脚本的可移植性时使用pdksh。
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2020-04-24 07:06:34

首先:$*$@反映当前的参数( arg向量),因此根据定义,set -u永远不会处于unset的状态,因此D3不能影响这些变量。

在以前,更多的shell存在这种问题,${*:-}解决方案并不少见。

众所周知,pdksh存在缺陷,并且不再作为自己的项目积极维护,所以不要指望bug会被修复。

mksh (来自MirBSD的外壳)是pdksh的一个固定的和积极维护的变体,它是可移植的,因此可以在许多平台上使用。托斯滕·格拉泽在这里做得很好。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/582172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档