在tcl中连接两个字符串

Pun*_*tal 1 string tcl string-concatenation

我需要在tcl中连接两个字符串,然后修改连接字符串,如果有任何不需要的字符,如'_'.字符串存储在tcl变量中,我面临的问题是我需要连接这两个字符串"$str1_$str2".基本上将两个字符串连接'_'在它们之间.我找到了如下方法.

    set str1 "mystring1";  #string 1
    set str2 "mystring2";  #string 2. This string could be Empty String as well.

    set outString [append outString "_" $str2];
    set outString [string trimright '_'];
Run Code Online (Sandbox Code Playgroud)

这给了我outString的值如下:

    puts $outString;  
    mystring1_mystring2    #if $str2 is not empty
    mystring1              #if $str2 is empty. 
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种更优化的方式来完成我的任务.我试着简单地加入两个字符串

    set outString "$str1_$str2"
Run Code Online (Sandbox Code Playgroud)

但我得到的错误是"没有像$ str1_这样的变量",因为'_'下划线可以是变量名的一部分.

任何建议,将不胜感激.

Kei*_*son 5

将变量插入到字符串中时,可以使用花括号来保护变量名称.

set str1 "mystring1";
set str2 "mystring2";
set outString "${str1}_${str2}"
Run Code Online (Sandbox Code Playgroud)

(相同的语法适用于shell脚本,Perl以及其他脚本语言.)

但我不会指望这种"更优化"的呼唤append.它更容易阅读,恕我直言这是一个很好的理由这样做,但不要认为它更快,直到你测量它.

参考:http://www.tcl-lang.org/man/tcl8.6/TclCmd/Tcl.htm#M12