debugging 有没有一个剥绒鱼一样,有一个打击与贝壳检查?

sczxawaw  于 2022-11-14  发布在  其他
关注(0)|答案(2)|浏览(199)

对于sh/bash/zsh,有https://github.com/koalaman/shellcheck,但是https://github.com/koalaman/shellcheck/issues/209不支持鱼-有鱼的棉绒吗?

o4hqfura

o4hqfura1#

据我所知,没有(显然这是不可能证明的)。
如果有人要创建这样一个东西,就需要对“典型的初学者语法问题”和“导致shell行为奇怪和违反直觉的语义问题”达成共识。
Fish没有POSIX sh的很多缺点(因为它是作为对它们的React而编写的)。

echo $1                           # Unquoted variables

Fish的引用行为非常不同--特别是,变量上没有单词拆分,所以未引用的变量 * 通常 * 会做你想做的事情。

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

这大概是一个(不成功的)尝试,以击败单词分裂,这是没有必要的。
这个例子很好地说明了这个问题--sh脚本已经存在了几十年了。它的缺陷和不直观的行为是众所周知的。事实上,众所周知,常见但不正确的变通方法也是众所周知的。但fish的情况却不是这样。
(显然,其他示例也适用于fish,尤其是“经常误用的命令”部分。)
fish中的一些东西是我认识的新用户经常绊倒的:

  • 不带引号的变量扩展为列表中每个元素一个参数(因为每个变量都是一个)。如果列表为空,则包括零,这是test的一个问题--例如test -n $var将返回0,因为fish的测试内置是POSIX兼容的少数部分之一(因为POSIX要求测试带有一个参数,返回0)。如果总是需要一个参数,则使用双引号。
  • {}扩展为nothing,{x}扩展为“x,”这意味着find -exec需要加引号,一些git提交(HEAD@{4})也需要加引号。此后,这一点已被更改,{}扩展为{}{x}扩展为{x},除非x有逗号或其他扩展,因此HEAD@{4}有效)
x9ybnkn6

x9ybnkn62#

fish -n--no-execute“不执行任何命令,只执行语法检查”,因此您可以执行like what I am doing here

for f in **/*.fish; do fish -n "$f"; done

相关问题