我在tcl中设置了一些代码,我试图实现压缩文件,但我收到的错误
zip warning: name not matched: a_1.txt a_2.txt a_3.txt a_4.txt
另一方面,我在命令提示符下做同样的事情我能够成功执行。
#!/usr/local/bin/tclsh
set outdir /usr/test/
set out_files abc.10X
array set g_config { ZIP /usr/bin/zip }
set files "a_1.txt a_2.txt a_3.txt a_4.txt"
foreach inp_file $files {
append zipfiles "$inp_file "
}
exec $g_config(ZIP) $outdir$out_files zipfiles
答案 0 :(得分:1)
Tcl真正关心单词之间的界限,除非被要求,否则不会拆分。这很好,因为它意味着带有空格的文件名这样的东西不会混淆它,但在这种情况下它会引起一些问题。
要让它拆分列表,请先从变量中读取单词{*}
:
exec $g_config(ZIP) $outdir$out_files {*}$files
这是 而不是 :
exec $g_config(ZIP) $outdir$out_files $files
# Won't work; uses "strange" filename
或者这个:
exec $g_config(ZIP) $outdir$out_files zipfiles
# Won't work; uses filename that is the literal "zipfiles"
# You have to use $ when you want to read from a variable and pass the value to a command.
有一个非常旧版本的Tcl {*}
不起作用?升级到8.5或8.6!或者至少使用这个:
eval {exec $g_config(ZIP) $outdir$out_files} $files
(如果你在outdir
中放置一个空格,你需要括号......)