Shell tcl脚本中@处缺少操作数
在if条件下,我想检查字符串是否包含模式,但我得到以下错误。 处缺少操作数_@_ 表达式$extra_url eq@*用户新建* 正在分析表达式$extra_url eq*user-n。。。 从内部调用 如果{$extra_url eq*用户新建*}{ 代码如下:Shell tcl脚本中@处缺少操作数,shell,if-statement,open-source,tcl,tclsh,Shell,If Statement,Open Source,Tcl,Tclsh,在if条件下,我想检查字符串是否包含模式,但我得到以下错误。 处缺少操作数_@_ 表达式$extra_url eq@*用户新建* 正在分析表达式$extra_url eq*user-n。。。 从内部调用 如果{$extra_url eq*用户新建*}{ 代码如下: if { $extra_url eq *user-new* } { ds_add rp [list notice "File $root/$extra_url: Not found" $startclicks [clock
if { $extra_url eq *user-new* } {
ds_add rp [list notice "File $root/$extra_url: Not found" $startclicks [clock clicks -milliseconds]]
ds_add rp [list transformation [list notfound "$root / $extra_url" $val] $startclicks [clock clicks -milliseconds]]
}
这里我检查额外的url字符串是否包含user\u new。
我不知道我是否做对了。请帮助。检查额外的url字符串是否包含user\u new:
if {[string match {*user_new*} $extra_url]} { ... }
if {[string first "user_name" $extra_url] != -1} { ... }
switch -glob $extra_url {
{*user_name*} { ... }
}
if {[regexp "user_name" $extra_url]} { ... }
eq严格用于字符串相等。检查额外的url字符串是否包含user\u new:
if {[string match {*user_new*} $extra_url]} { ... }
if {[string first "user_name" $extra_url] != -1} { ... }
switch -glob $extra_url {
{*user_name*} { ... }
}
if {[regexp "user_name" $extra_url]} { ... }
eq严格用于字符串相等。您的问题在这一行:
if { $extra_url eq *user-new* } {
if { $extra_url eq "*user-new*" } {
问题是,表达式解析器将*user new*的第一个*视为乘法运算符,并且您在一行中有两个二进制运算符,中间没有值标记,这是非法语法。实际上,对于表达式解析器,您还可以编写:
$extra_url eq * user - new *
好的,这只是在标记化之后,在双运算符之后还有其他问题,即无法识别的裸字和尾随的二进制运算符;解析将失败。是的,表达式解析器是一个非常传统的解析器,虽然与用于解析C或Java或
我猜您实际上想要字符串相等和文字标记,将标记放在{braces}或双引号中,或者您想要使用命令测试更复杂的情况,例如带字符串匹配的glob匹配。因此,选择其中一个:
if { $extra_url eq {*user-new*} } {
您的问题在这一行:
if { $extra_url eq *user-new* } {
if { $extra_url eq "*user-new*" } {
问题是,表达式解析器将*user new*的第一个*视为乘法运算符,并且您在一行中有两个二进制运算符,中间没有值标记,这是非法语法。实际上,对于表达式解析器,您还可以编写:
$extra_url eq * user - new *
好的,这只是在标记化之后,在双运算符之后还有其他问题,即无法识别的裸字和尾随的二进制运算符;解析将失败。是的,表达式解析器是一个非常传统的解析器,虽然与用于解析C或Java或
我猜您实际上想要字符串相等和文字标记,将标记放在{braces}或双引号中,或者您想要使用命令测试更复杂的情况,例如带字符串匹配的glob匹配。因此,选择其中一个:
if { $extra_url eq {*user-new*} } {
假设您正在尝试一个精确的字符串比较,用剪切和改编补充手册中的Donal Fellows: 使用与expr计算其参数相同的方式,将条件作为表达式进行计算 可通过以下任一方式指定: 作为双引号中的字符串。[…] 作为大括号中的字符串。[…] 请注意,它隐式地排除了裸字符串。它们必须是封闭的
我不知道为什么可能恰恰是为了避免混淆像您这样的字符串中的a*和有效的expr运算符,因此它偶尔也会咬我一口。假设您正在尝试精确的字符串比较,在Donal Fellows上进行补充,从手册页面中删减和修改: 使用与expr计算其参数相同的方式,将条件作为表达式进行计算 可通过以下任一方式指定: 作为双引号中的字符串。[…] 作为大括号中的字符串。[…] 请注意,它隐式地排除了裸字符串。它们必须是封闭的
我不知道为什么可能恰恰是为了避免混淆像您这样的字符串中的*和有效的expr运算符,因此它偶尔也会咬我一口。我写了这样的东西,如果{[string match{*user_new*}$extra_url]}{set extra_url filenotfound}它给出了错误的参数:没有脚本跟随执行if{[string match{*user\u new*}$extra\u url]时的[string match{*user\u new*}$extra\u url]参数。是否将开始大括号放在新行上?Tcl不允许这样做。if命令至少需要2个参数,并且由于新行是命令终止符,因此您只给了它1个参数。是否进行了更改,但现在在执行if{[string match{*user_new*}$extra_url]}时,在关闭大括号后会遇到以下错误额外字符{set extra_url filenotfound continue}ad_try{rp_serve_abstract_file$root…Tcl与shell类似,其基本语法是command arg arg…-各个参数之间用空格分隔。如果将两个参数粉碎在一起而不使用空格,Tcl会抱怨。Tcl语法的完整规则只能找到12条规则。您还可以从运行谢谢你的帮助。但是你能告诉我这段代码有什么问题或者这段代码的正确版本是什么吗?我写了这样的东西,如果{[string match{*user\u new*}$extra\u url]}{set extra\u url filenotfound}它给了er
ror作为错误的参数:在执行if{[string match{*user\u new*}$extra\u url]}时,[string match{*user\u new*}$extra\u url]参数后面没有脚本。是否将大括号放在新行上?Tcl不允许这样。if命令至少需要2个参数,因为newline是一个命令终止符,所以您只给了它1个参数。是否进行了更改,但现在在执行if{[string match{*user\u new*}$extra\u url]}{set extra\u url filenotfound continue}时在关闭大括号后遇到以下错误额外字符请重试{rp_serve_abstract_file$root…Tcl与shell类似,其基本语法是command arg arg…-各个参数之间用空格分隔。如果将两个参数粉碎在一起而不使用空格,Tcl会抱怨。Tcl语法的完整规则只能找到12条规则。您还可以从运行谢谢你的帮助。但是你能告诉我这段代码有什么问题吗?或者这段代码的正确版本是什么?