为什么放'和'失败?

Zhr*_*hro 2 tcl

有人可以解释为什么这会一直失败吗?

set hostname ""

if {$hostname eq ""} {
   puts "Usage: host [-u username] [-p password] [-f]"
   exit 5
}

if {[string length $hostname] == 0} {
   puts "Usage: host [-u username] [-p password] [-f]"
   exit 5
}

 if {[string equal $hostname ""]} {
   puts "Usage: host [-u username] [-p password] [-f]"
   exit 5
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

invalid command name "-u"
    while executing
"-u username"
    invoked from within
"if {$s eq ""} {puts "Usage: host [-u username] [-p password] [-f]"}"
Run Code Online (Sandbox Code Playgroud)

代码似乎执行正常,但我似乎无法使用包含大括号的字符串.

小智 8

双引号字符串中的方括号表示评估.尝试使用反斜杠转义方括号.

  • @Yatin实际上,这种语言比大多数其他语言更加一致.括号总是意味着同样的事情,除非你不小心引用它们,所以你知道你必须惹麻烦.完全可以预测. (8认同)

gle*_*man 7

另一种方法是为您打印的字符串使用不同的引号:

puts {Usage: host [-u username] [-p password] [-f]}
Run Code Online (Sandbox Code Playgroud)

大括号的行为类似于shell的单引号:它们阻止括号引用的字符串中的替换.

您可能还想花一些时间研究Tcl的12种语法规则:http:
//www.tcl.tk/man/tcl8.5/TclCmd/Tcl.htm