作者:蔡少暖_171 | 来源:互联网 | 2023-02-09 17:14
对于sh/bash/zsh,有https://github.com/koalaman/shellcheck,但不会支持它的鱼https://github.com/koalaman/shellcheck/issues/209 - 有没有任何麻烦钓鱼?
1> faho..:
据我所知,没有(显然这是不可能证明的).
如果有人要创造这样的东西,就需要就"典型的初学者的语法问题"和"导致shell表现奇怪和反直觉的语义问题"的共识达成共识.
鱼没有很多POSIX sh的疣(因为它被写成对它们的反应).shellcheck自述文件中的一些示例:
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}
)一样.