Codacy 分析器警告:在 POSIX sh 中,[[ ]] 未定义

Posted

技术标签:

【中文标题】Codacy 分析器警告:在 POSIX sh 中,[[ ]] 未定义【英文标题】:Codacy analyzer warning: In POSIX sh, [[ ]] is undefined 【发布时间】:2021-05-14 17:20:28 【问题描述】:

当我为下一行脚本运行codacy-analysis-cli analyze 命令时:

if [[ "$lexer_date" > "$lexer_ts_date" ]]; then
    generate_grammar
fi

我收到了下一个警告: Found [Warning] `In POSIX sh, [[ ]] is undefined.` in scripts/grammar.sh:20 (shellcheck_SC2039)

我该如何解决?

【问题讨论】:

不要将[[/bin/sh 一起使用?警告是真的。 [[sh 标准未指定的功能,因此不能保证 /bin/sh 提供它。如果您想要仅在 ksh 或 bash 等扩展 shell 中添加的功能,则需要使用 ksh 或 bash 等扩展 shell。 除此之外,不清楚你想要什么样的答案。 ...也就是说,您可能会发现What is the difference between [ and [[ in bash? 很有用。 谢谢@CharlesDuffy。我看看你的链接。我只想修复警告并寻找替代方案。 最好的替代方法是停止尝试使用/bin/sh,如果您需要它不提供的功能,而是改用 ksh 或 bash。 [[ 的存在是有原因的(因为它提供的许多功能超过 [ 在没有语法扩展的情况下是不可能的,并且 [ 需要像常规命令一样被解析,而不是像语法那样)。 【参考方案1】:

请改用[。请注意,对于字母数字比较,您需要引用比较运算符;因此:

if [ "$lexer_date" ">" "$lexer_ts_date" ]; then
    generate_grammar
fi

【讨论】:

运算符需要引用吗?否则会被视为重定向吗?

以上是关于Codacy 分析器警告:在 POSIX sh 中,[[ ]] 未定义的主要内容,如果未能解决你的问题,请参考以下文章

来自 codacy 的 Eslint 配置文件

Codacy Quality Check

sh 壳:快速和脏 - 检查POSIX安装程序系统

POSIX sh 重定向

如何判断一个字符串是不是包含 POSIX sh 中的另一个字符串?

如何判断一个字符串是不是包含 POSIX sh 中的另一个字符串?