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

时间:2014-07-30 23:16:56

标签: 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
}   

我正在通过新的passvalue更改具有值ABC的行。 "放"正常工作并打印passvalue的值。 但它对sed不起作用,它给出了

错误:编程未定义的变量

请让我知道我在哪里做错了。

我也尝试过使用字符串映射,但也可以工作......我可能做错了。

1 个答案:

答案 0 :(得分:2)

大括号可抑制变量替换。如果您希望在调用$passedvalue之前展开exec,则需要使用其他一些引用机制。

例如,您可以使用双引号:

exec sed -i "s/ABC/$passedvalue/g" runme.sh

但是,您需要添加一些额外的防弹。例如,如果$passedvalue中包含/,您将向sed发送格式错误的表达式。