取消设置没用? (Korn shell)

时间:2017-04-15 13:01:26

标签: shell variables unix

我正在读这个:

  

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

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

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

2 个答案:

答案 0 :(得分:1)

未设置变量和空变量之间存在相关差异 如果您无法预先知道将使用哪些变量,则可以处理local的输出(示例:https://stackoverflow.com/a/43419722/3220113https://stackoverflow.com/a/28104421/3220113)。
您可能有一个源自已获取只读配置文件的位置,但您不希望在您的环境中设置所有行。在这种情况下,您可能需要unset您不需要的设置 当您编写一些使用某些变量的实用程序时,您不希望在环境中留下垃圾。使用Private Sub command6_Click() DoCmd.GoToRecord, , acNewRec End Sub 使用stat变量旁边是另一种可能性。

答案 1 :(得分:0)

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

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

2)那就是说,如果你使用nounsetunset命令是有道理的。实际上,如果取消设置变量,shell将禁止使用它。