对于sh/bash/zsh,有https://github.com/koalaman/shellcheck,但是https://github.com/koalaman/shellcheck/issues/209不支持鱼-有鱼的棉绒吗?
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
{}
{x}
find -exec
HEAD@{4}
x9ybnkn62#
fish -n或--no-execute“不执行任何命令,只执行语法检查”,因此您可以执行like what I am doing here:
fish -n
--no-execute
for f in **/*.fish; do fish -n "$f"; done
2条答案
按热度按时间o4hqfura1#
据我所知,没有(显然这是不可能证明的)。
如果有人要创建这样一个东西,就需要对“典型的初学者语法问题”和“导致shell行为奇怪和违反直觉的语义问题”达成共识。
Fish没有POSIX sh的很多缺点(因为它是作为对它们的React而编写的)。
Fish的引用行为非常不同--特别是,变量上没有单词拆分,所以未引用的变量 * 通常 * 会做你想做的事情。
这大概是一个(不成功的)尝试,以击败单词分裂,这是没有必要的。
这个例子很好地说明了这个问题--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}
有效)x9ybnkn62#
fish -n
或--no-execute
“不执行任何命令,只执行语法检查”,因此您可以执行like what I am doing here: