2014-04-22 134 views
1

如果條件我想檢查字符串是否包含模式,但是我收到跟隨錯誤。 missing operand at [email protected]_ in expression " $extra_url eq [email protected]_*user-new* " (parsing expression " $extra_url eq *user-n...") invoked from within "if { $extra_url eq *user-new* } {在tcl腳本_ _ _中缺少操作數

代碼如下:

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]] 

} 

我在這裏檢查extra_url字符串是否包含 「user_new」。 我不知道我是否做得對。請幫忙。

回答

3

你的問題是在這條線:

if { $extra_url eq *user-new* } { 

的問題是,表達式解析器對待*user-new*作爲乘法運算符的第一*,和你有連續二元算沒有值 - 介於兩者之間,這是非法的語法。事實上,表達式解析器,你還不如採寫:

$extra_url eq * user - new * 

OK,這只是符號化後,並具有雙操作後的其他問題,即無法識別的裸字和後二元運算符;解析失敗。 (是的,表達式解析器是一個非常傳統的解析器,不能完全不同的(雖然比簡單的)那些用來解析C或Java或...)

我猜你實際上想用文字或者標記的字符串相等(將令牌放在{大括號中}"雙引號")或者您想要使用命令來測試一些更復雜的情況,例如與string match的glob匹配。因此,挑選其中之一:

if { $extra_url eq {*user-new*} } { 
if { $extra_url eq "*user-new*" } { 
if { [string match *user-new* $extra_url] } { 
+0

之間或者甚至使用['string first'](http://www.tcl.tk/man/tcl8.6/TclCmd/string.htm#M7)... –

+0

謝謝你建議和解釋。乾杯!! –

1

檢查extra_url字符串是否包含 「user_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嚴格用於字符串平等。

+0

我寫了這樣的事情 '如果{[字符串匹配{* user_new *} $ extra_url]} \t { \t \t \t集extra_url 「filenotfound」 }' 它給了錯誤的'錯誤#ARGS:無如果{[字符串匹配{* user_new *} $ extra_url]}「'執行 」參數 「後面的腳本[字符串匹配{* user_new *} $ extra_url] –

+0

您是否將新款大括號放在新的行中? Tcl不允許這樣做。 'if'命令至少需要2個參數,並且(因爲換行符是一個命令終止符),所以只給出它1. –

+0

做了更改,但現在面臨以下錯誤 '在執行 時出現多餘字符 「if { [字符串匹配{* user_new *} $ extra_url]} { \t \t \t集extra_url 「filenotfound」 \t \t \t繼續 } {ad_try rp_serve_abstract_file 「$根......」' –

0

假設你正在嘗試一個確切的字符串比較,補充上多納爾研究員,從手動頁(削減和調整):

if command將條件評估爲表達式(與expr評估其參數的方式相同)。

Operands for the expr command可以以任何下列方式來指定:

  • 如括在雙引號的字符串。 [...]
  • 作爲用大括號括起來的字符串。 [...]

  • 注意,它含蓄地排除了裸字符串。它們必須被封閉。

    我不知道爲什麼(也許正是爲了避免混淆*之間的字符串像你的和有效的expr操作符),因此它咬我一會兒。