【问题标题】:Unset is not useful? (Korn shell)取消设置没用? (玉米壳)
【发布时间】:2017-04-15 13:01:25
【问题描述】:

我在读这个:

您可以使用命令unset varname 删除变量。通常这没有用,因为所有不存在的变量都被假定为空,即等于空字符串“”。但是如果您使用选项nounset 导致shell 在遇到未定义变量时指示错误,那么您可能对unset 感兴趣。

我的第一个问题是:我不明白为什么使用unset 没有用;如果我想将我的变量放入null,我可以使用它(或设置variable=""variable=)。另一方面,如果我有一个不存在的变量,我不知道为什么我必须使用它..

我的第二个问题是:在这种情况下,我为什么会对unset 感兴趣?

【问题讨论】:

标签: shell variables unix


【解决方案1】:

未设置变量和空变量之间存在相关差异。
当前面无法判断会用到哪些变量时,可以处理set的输出(例如:https://stackoverflow.com/a/43419722/3220113https://stackoverflow.com/a/28104421/3220113)。
您可能有一种情况,您获取了一个只读配置文件,但您不希望在您的环境中设置所有行。在这种情况下,您可能需要unset 不需要的设置。
当您编写一些使用某些变量的实用程序时,您不想在环境中留下垃圾。除了使用local 变量之外,使用unset 是另一种可能性。

【讨论】:

  • 我想我开始明白了。我问你的第一件事是关于你的第一个断言: {"", 0, null, $var - 声明的变量没有值等} 是关于未设置结果的另一件事;所以我问你 unset 到底是做什么的。我读到它等同于 var= 或您在引用文本中看到的 "" 。有点困惑..我需要一些进一步的帮助。
【解决方案2】:

我想我找到了问题的答案。

1) 如果您需要删除变量的定义内容,您可以使用unset 命令。但是,除非您打开 nounset 设置选项,否则 Korn Shell 将允许使用不存在的变量,并且它会将此类变量的内容默认为空字符串。这就是为什么您通常不使用unset: 因为您通常会关闭nounset 选项并通过条件逻辑测试变量。因此,在这些情况下,即禁止使用变量,它是没有用的。 (显然,它对于删除变量仍然有用 - 正如@Walter A 所指出的,即“”不是unset,完全删除变量。)

2) 也就是说,如果你使用nounsetunset 命令是有意义的。实际上,如果您取消设置变量,shell 将不允许使用它。

【讨论】:

    猜你喜欢
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 2012-01-28
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    相关资源
    最近更新 更多