Насколько я понимаю:
Использование CMD:
echo Apple Pie|git hash-object --stdin
возвращает то же самое, что и следующее в PowerShell
"Apple Pie" | git hash-object --stdin
То есть:
157cb7be4778a9cfad23b6fb514e364522167053
@ Mofi, кажется, прав, вы можете воспроизвести результат CMD в Powershell, используя:
'"Apple Pie" ' | git hash-object --stdin
Чтобы объяснить Ma c OS one: Получить 157cb7be4778a9cfad23b6fb514e364522167053 реальный список символов, который хэшируется: 'Apple Pie\r\n'
(с переводом строки возврата carage), в Ma c или linux, как в командной строке, это 'Apple Pie\r'
.
Если вы хотите проверить это: поместите 'Apple Pie'
в текстовый файл с возвратом кариеса и сохраните его как Windows текстовый стиль (CR + LF) и используйте git hash-object yourfile.txt
. Затем сохраните его в стиле Linux (LF) и протестируйте снова, вы найдете два хэша.
Часть о \ r \ n.
"Apple Pie" | where {$_.length -eq 9}
показывает, что длина строки ровно 9 символов
Для меня это потому, что в вашем случае канал находится между двумя частями PowerShell, канал передает объект. Когда канал находится между PowerShell и внешним EXE-файлом, тогда добавляются \ r \ n. Вот способ проверить это с помощью небольшого exe-файла, записанного в C#:
using System;
namespace C_Param
{
class Program
{
static void Main(string[] args)
{
string line = Console.In.ReadToEnd();
foreach (char character in line){
Console.WriteLine(String.Format("{0:X2}", Convert.ToByte(character)));
}
}
}
}
Результат в консоли PowerShell:
"Apple Pie" | .\C_Param.exe
41
70
70
6C
65
20
50
69
65
0D
0A
Результат в консоли CMD это:
echo "Apple Pie" | .\C_Param.exe
22
41
70
70
6C
65
20
50
69
65
22
20
0D
0A
КЭД?