有没有像鱼一样用贝壳检查的鱼?

时间:2017-03-07 23:35:27

标签: debugging fish

对于sh / bash / zsh,有https://github.com/koalaman/shellcheck,但是它不会支持鱼https://github.com/koalaman/shellcheck/issues/209 - 鱼有什么用途吗?

1 个答案:

答案 0 :(得分:5)

据我所知,没有(显然这是不可能证明的)。

如果有人要创造这样的东西,就需要就“典型的初学者的语法问题”和“导致shell表现奇怪和反直觉的语义问题”的共识达成共识。

Fish没有很多POSIX sh的疣(因为它是作为对它们的反应而写的)。 shellcheck README

中的一些示例
echo $1                           # Unquoted variables

Fish的引用行为是完全不同的 - 特别是,变量上没有单词分割,所以未引用的变量通常可以做你想要的。

v='--verbose="true"'; cmd $v      # Literal quotes in variables

这可能是一次(不成功的)企图击败分词,这是不必要的。

这个例子很好地说明了这个问题 - 有几十年的sh脚本。缺陷和不直观的行为是众所周知的。事实上众所周知,常见但不正确的变通方法也是众所周知的。这不是鱼的情况。

(显然,其他例子也适用于鱼类,尤其是“经常误用的命令”部分。)

我知道新用户经常会遇到鱼类中的一些东西:

  • 不带引号的变量会扩展到列表中每个元素的一个参数(因为每个变量都是一个)。如果列表为空,则包括零,这是test的问题 - 例如test -n $var将返回0,因为fish的内置测试是与POSIX兼容的少数几个部分之一(因为POSIX要求测试,一个参数返回0)。如果你总是需要一个参数,请双引号。

  • {}扩展为空,{x}扩展为“x”,这意味着find -exec需要引用,一些git commit-ishes(HEAD@{4})也需要引用