The "<<" [exec] redirection operator truncates its operand at the first NUL. Similar does not happen when writing to an [open |] channel.
% exec xxd << ab\0cd
0000000: 6162 ab
% exec xxd << ab\1cd
0000000: 6162 0163 64 ab.cd
% set chan [open |xxd a+]; puts -nonewline $chan ab\0cd; close $chan write; read $chan
0000000: 6162 0063 64 ab.cd
Relates to http://tip.tcl.tk/259.html
This is fixed in 8.5.12 and 8.6b3 . You must not really be
testing what you think you are testing. Use [package present Tcl]
to confirm.
% package present Tcl
8.6b3
% exec xxd << ab\0cd
0000000: 6162 0063 64 ab.cd
%
Sorry for picking the wrong version, I meant 8.6b2. Also I tested on 8.4.something, forget exactly what, but it was nowhere close to the latest 8.4.