为什么带有括号 `()` 的 `echo` 会破坏 `if` 语句?

为什么带有括号 `()` 的 `echo` 会破坏 `if` 语句?

以下代码中的语句if不应该触发,但它确实触发了。如果我将其更改echo ()echo [],它会按预期工作。所以显然它与括号有关()

  set a=1
  set b=2
  if "%a%" == "%b%" (
    echo foo()
    echo triggered
  )

输出:

triggered

答案1

它会干扰带有括号“)”的 if 结构:

如果条件为真(执行此操作)否则(执行此操作)

但是您可以使用脱字符“^”转义回显中的括号以获得所需的输出。

echo foo(^)

@echo off

set a=1
set b=1

if not "%a%" == "%b%" (
  echo foo(^)
  echo triggered
) else ( 
  echo foo too(^)
)
pause

当命令解释器遇到)字符,它明白它正在关闭它所发现的条件的指令,无论真假。

没有必要逃避(角色,只有结尾^)特点。

相关内容