Echo fügt Platz hinzu, wenn es mit einer Pipe verwendet wird

Während der Beantwortungdiese Frage Ich habe ein merkwürdiges Verhalten gefunden, für das ich keine Erklärung habe

for /f "delims=" %a in ('(for /l %z in (1,1,10^) do @echo %z^)') do @echo %a0

Sie sehen die Nummern 10..100. Fügen Sie jetzt einfach die Pipe hinzu, z. zusort odermore, was auch immer:

for /f "delims=" %a in ('(for /l %z in (1,1,10^) do @echo %z^)^|sort') do @echo %a0

Dazwischen werden Leerzeichen eingefügt%a und0! Sieht so aus, als würde ein Echo durch eine Pipe ein Leerzeichen hinzufügen, das leicht zu erkennen ist:

>_tempfile echo no space here
>_tempfile echo and here's a space|more

und selbst

>_tempfile <nul set /p =also a space|sort

(Verwendet wahrscheinlich Echo, um die Eingabeaufforderung zu drucken)

Dies geschieht nicht, wenn keine Ausgabeumleitung vorhanden ist (ob in eine Datei oder für einen Befehl). Ist es ein Fehler oder fehle ich etwas? Wie werde ich den Raum los? (neben dem dreckigen hack das letzte zeichen mit ausziehenvar:~0,-1)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage