2016-10-18 10 views
2

どのようにFreeBSDの上のLinux余分な文字クローズブレース

% set timeZone "-4:0" 
-4:0 
% set timeZone [format "%+03d%02d" {*}[scan $timeZone "%d:%d"]] 
-0400 
% puts $tcl_version 
8.5 

にFreeBSD

% set timeZone "-4:0" 
-4:0 
% set timeZone [format "%+03d%02d" {*}[scan $timeZone "%d:%d"]] 
extra characters after close-brace 
% puts $tcl_version 
8.4 

動作しないLinux上で動作する同じコードの後FreeBSDとLinuxの両方でこの作業を行いますか?

+2

FreeBSDのインストールで、サポートされなくなったTclのバージョンが使用されているようです。ちょうど更新できますか? –

答えて

2

リスト展開({*}was implemented in Tcl 8.5のため、evalを使用する必要があります。あなたは、おそらくこのようなものを使用することができます

set timeZone "-4:0" 
set code "format \"%+03d%02d\" [scan $timeZone "%d:%d"]" 
# This gives you "format "%+03d%02d" -4 0" 
set timeZone [eval $code] 

あなたが引用符をエスケープ気に入らない場合、あなたは(IMOは、ビットクリーナーです)括弧を使用することができます。

set code "format {%+03d%02d} [scan $timeZone {%d:%d}]" 

かwikiのより精巧な8.4解決策はhereで見つけることができます。

関連する問題