TCL/TK中的SED和TCL中的任何其他等效命令

TCL/TK中的SED和TCL中的任何其他等效命令,tcl,tk,Tcl,Tk,我正在尝试使用“过程调用”将值从TK传递到cshell脚本。。。。如下 proc Run {} { global passedvalue ## to see what value it has for passedvalue puts $passedvalue exec sed -i {s/ABC/$passedvalue/g} runme.sh exec /bin/csh -c ./runme.sh >@stdout 2>@stderr }

我正在尝试使用“过程调用”将值从TK传递到cshell脚本。。。。如下

proc Run {} {
   global passedvalue
   ## to see what value it has for passedvalue
   puts  $passedvalue  
   exec sed -i {s/ABC/$passedvalue/g} runme.sh
   exec /bin/csh -c ./runme.sh >@stdout 2>@stderr
}   
我正在用新的passedvalue更改具有值ABC的行。 “puts”工作并正确打印passedvalue的值。 但它对sed不起作用,它会

错误:程序未定义变量

请让我知道我哪里做错了


我也尝试过使用字符串映射,但也成功了……我可能做错了什么。

大括号禁止变量替换。如果希望在调用
exec
之前展开
$passedvalue
,则需要使用其他报价机制

例如,可以使用双引号:

exec sed -i "s/ABC/$passedvalue/g" runme.sh
不过,您需要添加一些额外的防弹措施。例如,如果
$passedvalue
中有一个
/
,您将向
sed
发送一个格式错误的表达式