Tcl执行[info procs not_there] eq ""时报空命令名错误原因求解
Tcl报错原因及认知错误说明
核心错误点
你存在两个关键的Tcl语法概念认知偏差:
eq是仅在expr命令上下文内生效的比较运算符,并非可以独立调用的顶层命令,你直接在全局作用域使用eq做判断本身就不符合Tcl的语法规则。- Tcl解释器的解析优先级是先完成所有命令替换、变量替换,再将解析后的第一个单词作为命令名执行:当
not_there不存在时,[info procs not_there]会返回空字符串,替换完成后你写的整行代码的首个解析元素就是空字符串,自然就抛出了「空命令名""」的错误。
正确写法
如果要实现你预期的判断逻辑,需要把整个比较逻辑包裹在expr命令中:
# 判断过程是否不存在,不存在时返回1,存在返回0 expr {[info procs not_there] eq ""} # 如果你需要过程不存在时返回0、存在返回1,修改为如下写法即可 expr {[info procs not_there] ne ""}
内容的提问来源于stack exchange,提问作者njamescouk
相关产品推荐
相关产品推荐

