【问题标题】:What is the difference between using "-ne" and "!=" for evaluating the exit code in KornShell (ksh)?使用“-ne”和“!=”评估 KornShell (ksh) 中的退出代码有什么区别?
【发布时间】:2014-01-25 13:13:40
【问题描述】:

以下两个 KornShell (ksh) sn-ps 之间有什么区别,因为它们在测试期间的行为完全相同到目前为止?返回代码(例如,退出代码、返回状态、退出状态、returnCode)来自 SQL*Plus 命令(如果重要)。

kornShellSnippet1.ksh

returnCode=${?}
    if [[ ${returnCode} -ne 0 ]]; then #successful command returns 0#

kornShellSnippet2.ksh

returnCode=${?}
    if [[ ${returnCode} != 0 ]]; then #successful command returns 0#

【问题讨论】:

    标签: shell unix scripting ksh


    【解决方案1】:

    据我所知,-ne 是支持向后兼容的旧语法,而(至少在 ksh 双方括号内)!= 等是原生 ksh 语法。

    不过,为了比较数字,你不会使用算术语法吗?

    let returnCode=${?}
    
    if (( returnCode != 0 )); then #successful command returns 0#
    

    【讨论】:

      【解决方案2】:

      -ne 是数字测试,!= 是字符串测试。既然您知道$? 是一个数字,那么使用数字测试是有意义的。

      【讨论】:

      • 有没有可以在 ksh 中运行的命令来告诉我变量是什么数据类型?我想在 ${?} 上运行它,希望它显示一个数字。
      • 这让我很困惑,因为我认为 shell 变量没有类型。
      • @javaPlease42 $? 总是包含一个数字。在 ksh93 中,变量实际上可以定义为整数或浮点数。在数值运算中使用它们总是安全的。如果变量没有预定义类型,则将其视为字符串;请注意,字符串仍然可以包含数字,在这种情况下,它仍然可以按原样使用。但是,如果数字格式不正确,ksh 将失败并出现致命错误。
      • @HenkLangveld 所以在 ksh 中使用 != 来测试 ${?} 会更安全吗?
      猜你喜欢
      • 2012-01-02
      • 1970-01-01
      • 2016-12-02
      • 2012-03-22
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      • 1970-01-01
      • 2010-09-10
      相关资源
      最近更新 更多