【问题标题】:Exclamation point in bash function name - should I?bash 函数名称中的感叹号 - 我应该吗?
【发布时间】:2012-01-10 20:45:51
【问题描述】:

我正在编写一个 bash 脚本,在函数名中使用感叹号真的很方便。

例子:

function hello! {
    echo goodbye
}
function hello {
    echo hello
}

而且有效!

查看specs后,我发现了这个:

姓名 仅由字母、数字和下划线组成并以字母或下划线开头的单词。名称用作 shell 变量和函数名称。也称为标识符。

我觉得我在这里违反了规则。这是错的吗?这会在将来搞砸吗?究竟发生了什么?

【问题讨论】:

    标签: bash naming


    【解决方案1】:

    由于它违反了 Bash 规范,我想说您正在利用 Bash 中的一个错误,因此当错误得到修复时,您的代码可能无法工作。删除!

    【讨论】:

      【解决方案2】:

      出于好奇,为什么在函数名中使用感叹号会方便得多?

      一般来说,出于便携性的原因,您可能不想使用 bang;仅仅因为该特定操作系统上的解释器接受它,如果您需要将该脚本部署到其他地方,其他口味/版本略有不同的解释器可能不会接受它。

      【讨论】:

      • 嗯,我正在编写的函数是进行一些错误检查的包装器,所以我希望它们简短。包装纸!失败时退出,其他包装器只打印警告并且不退出。它使事情变得非常清楚。
      • 这可以通过使用“_e”(xits)而不是“!”来完成以及。无需使用潜在的兼容性问题/错误/规范中没有的任何其他内容;)
      【解决方案3】:

      我不确定这种情况下的含义,但如果规范明确说明了这一点,我会说除此之外的任何行为都是未定义的行为,应该避免。

      【讨论】:

        【解决方案4】:

        这不是一个好主意!如果您希望代码可移植,请在函数名称中。 bash --posix 或调用 bash 作为 "sh" 都拒绝 "hello!"作为函数名。但我怀疑 bash 会默默地允许异常的函数名称(“hello?”“hello-”和“hello/”也可以使用,仅举几例),因为函数的一个重要用途是允许用户覆盖普通命令和这些命令(例如 ls、rm 等)可以包含文件系统允许的任何类型的字符。

        请注意“你好!”作为一个变量名称不起作用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-28
          • 1970-01-01
          相关资源
          最近更新 更多