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 中,[[ ]] 未定义的主要内容,如果未能解决你的问题,请参考以下文章