Tcl:if语句中的多个条件

Ste*_*eve 1 tcl

只是尝试在脚本中进行一些基本检查...如果$argc不是1或2 则产生错误.

我试过了:

if { ( $argc != 1 ) || ( $argc != 2 ) } {
        puts "ERROR: \$argc should be either 1 or 2.\n"; exit 1
}
Run Code Online (Sandbox Code Playgroud)

if { ( $argc != 1 || $argc != 2 ) } {
        puts "ERROR: \$argc should be either 1 or 2.\n"; exit 1
}
Run Code Online (Sandbox Code Playgroud)

等等

但无法使用任何括号/括号组合使其工作.

任何帮助将不胜感激.

Bra*_*nam 5

这是基本逻辑.

您的示例将无效,因为2不等于1,因此第一个测试为真.

要否定OR连接,您否定每个测试并将OR更改为AND.你想要这种状态:

if { ( $argc == 1 ) || ( $argc == 2 ) } {
  puts "ok"
} else {
  puts "ng"
}
Run Code Online (Sandbox Code Playgroud)

所以使用:

if { ( $argc != 1 ) && ( $argc != 2 ) } {
  # i.e. if $argc is either anything other than a 1 or a 2...
  puts "ERROR: \$argc should be either 1 or 2.\n"; exit 1
}
Run Code Online (Sandbox Code Playgroud)

  • 或者`!($ argc == 1 || $ argc == 2)`这是等价的.`之间的转换!(A || B)`到`!A &&!B`被称为De Morgan的定理(基本上是`!(A || B)===!A &&!B`) (3认同)

Pet*_*rin 5

其他方式:

if {$argc ni {1 2}} { ... }
Run Code Online (Sandbox Code Playgroud)

即:如果 argc 的值不在包含 1 和 2 的列表中,...

操作员ni需要 Tcl 8.5 或更高版本。

文档: if , ni (运算符)