expr 命令语法:字符串表达式必须括起来?

expr command syntax: string expression must be enclosed?

当我编写以下脚本时:

expr "a" ne "ab"

我收到一个错误:

invalid bareword "a" 
in expression "a ne ab";
should be "$a" or "{a}" or "a(...)" or ... 

我需要将其更改为 expr {"a" ne "ab"}

是的,我知道始终用大括号引用表达式参数是最佳做法,但从语法的角度来看,上面的脚本有什么问题?

我查看了手册页,https://www.tcl.tk/man/tcl8.6/TclCmd/expr.htm,这里没有说有语法要求。

再次查看手册页,在 "Operands" 下。字符串操作数必须用双引号或大括号括起来。那些引号或大括号本身必须在调用中被引用,否则 Tcl 解释器将在将参数传递给命令之前将它们去掉。

如果您的调用是

expr "a" ne "ab"

该命令将获取参数列表

a ne ab

无法处理。

您可以这样引用引语:

expr \"a\" ne \"ab\"

但是你最好把所有的东西都放在一个论点中。这将看起来更整洁,保留您的报价,并避免其他一些严重的问题。