bash 包含 AND 逻辑运算符的 IF 子句不起作用

bash IF clause containing AND logic operator not working

我正在构建一个 bash 脚本,它在 IF 语句中有 2 个条件,由 AND 逻辑运算符链接,但它在执行时会报错。 仅作记录,如果我 运行 每个条件都是唯一的 IF,两者都可以正常工作。当我尝试执行由 -a (AND) 运算符粘附的两者时,出现了问题。这是:

if [[ "" =~ ".com" -a test "$#" -eq 1 ]]
then
echo "olalá"
fi

我将不胜感激有关此问题的任何提示。

-a[ ] 测试表达式中的 AND 运算符,但 [[ ]] 条件表达式使用 && 代替。此外,表达式中有一个杂散的 test 根本不属于那里。这是更正后的版本:

if [[ "" =~ ".com" && "$#" -eq 1 ]]

您可以等效地使用两个单独的 [[ ]] 表达式并在它们之间使用 &&

if [[ "" =~ ".com" ]] && [[ "$#" -eq 1 ]]

(如果您使用 [ ] 表达式,这将是首选方法,因为涉及 -a-o 等的语法含糊不清;但 [[ ]],没有歧义,任何一种方法都可以正常工作。)