是否有像 bash 那样的带有 shellcheck 的鱼短绒?
Is there a linter for fish like there is for bash with shellcheck?
对于 sh/bash/zsh 有 https://github.com/koalaman/shellcheck however there won't be support for fish with it https://github.com/koalaman/shellcheck/issues/209 - 有鱼短绒吗?
据我所知,没有(显然这无法证明)。
如果有人要创造这样的东西,就需要就 "typical beginner's syntax issues" 和 "semantic problems that cause a shell to behave strangely and counter-intuitively" 是什么达成共识。
鱼没有很多 POSIX sh 的疣(因为它是作为对它们的反应而写的)。来自 shellcheck README 的一些示例:
echo # Unquoted variables
Fish 的引用行为非常不同 - 特别是,变量没有分词,因此未引用的变量通常 做你想做的事。
v='--verbose="true"'; cmd $v # Literal quotes in variables
这可能是一次(不成功的)尝试来阻止分词,这是没有必要的。
这个例子很好地说明了这个问题——有几十年的 sh 脚本。这些缺陷和不直观的行为是众所周知的。事实上,众所周知,常见但不正确的解决方法也是众所周知的。鱼的情况并非如此。
(显然,其他示例也适用于鱼,尤其是 "Frequently misused commands" 部分。)
我知道新用户经常被鱼绊倒的一些东西:
未加引号的变量扩展为列表中每个元素一个参数(因为每个变量都是一个)。如果列表为空,则包括零,这是 test
的问题 - 例如test -n $var
将 return 0 因为 fish 的测试内置是 POSIX 兼容的少数部分之一(因为 POSIX 要求使用一个参数进行测试 returns 0 ).如果您总是需要一个参数,请加双引号。
{}
扩展为空,{x}
扩展为 "x",这意味着 find -exec
需要引用,某些 git 也需要引用提交 (HEAD@{4}
).
对于 sh/bash/zsh 有 https://github.com/koalaman/shellcheck however there won't be support for fish with it https://github.com/koalaman/shellcheck/issues/209 - 有鱼短绒吗?
据我所知,没有(显然这无法证明)。
如果有人要创造这样的东西,就需要就 "typical beginner's syntax issues" 和 "semantic problems that cause a shell to behave strangely and counter-intuitively" 是什么达成共识。
鱼没有很多 POSIX sh 的疣(因为它是作为对它们的反应而写的)。来自 shellcheck README 的一些示例:
echo # Unquoted variables
Fish 的引用行为非常不同 - 特别是,变量没有分词,因此未引用的变量通常 做你想做的事。
v='--verbose="true"'; cmd $v # Literal quotes in variables
这可能是一次(不成功的)尝试来阻止分词,这是没有必要的。
这个例子很好地说明了这个问题——有几十年的 sh 脚本。这些缺陷和不直观的行为是众所周知的。事实上,众所周知,常见但不正确的解决方法也是众所周知的。鱼的情况并非如此。
(显然,其他示例也适用于鱼,尤其是 "Frequently misused commands" 部分。)
我知道新用户经常被鱼绊倒的一些东西:
未加引号的变量扩展为列表中每个元素一个参数(因为每个变量都是一个)。如果列表为空,则包括零,这是
test
的问题 - 例如test -n $var
将 return 0 因为 fish 的测试内置是 POSIX 兼容的少数部分之一(因为 POSIX 要求使用一个参数进行测试 returns 0 ).如果您总是需要一个参数,请加双引号。{}
扩展为空,{x}
扩展为 "x",这意味着find -exec
需要引用,某些 git 也需要引用提交 (HEAD@{4}
).