While the above described difference of operation appears natural (a file might be read on another system with a different byte order, but a pipe is always local), temporary files, such as those used by |! cannot be copied to any other system, so they don't actually need the Byte Order Mark (regardless of what Microsoft does). They do not even need an indication of encoding (ASCII, UTF-8, UTF-16, etc.) because the same program that wrote them is the only one that can read them, and the program already knows which encoding it used. Based on this logic the two operations should be identical, i.e., regardless of what command (internal or external) feeds the pipe and what command consumes its contents, the standard (concurrent processes) and the in-process pipes should generate identical results. It should not be WAD. If an MS API is responsible for the BOM of the in-process pipe, IMHO TCC ought to work around it. OTOH if a user decides to redirect command output to a Unicode file, and later processes that file, the BOM is a natural part of that file - after all, it may be sent to a big-endian system!