PowerShell 的 echo 和 CMD 的 echo 的区别
Difference between PowerShell's echo and CMD's echo
我在 PowerShell 中得到以下信息:
D:\> echo "Apple Pie" | git hash-object --stdin
157cb7be4778a9cfad23b6fb514e364522167053
D:\> "Apple Pie" | git hash-object --stdin
157cb7be4778a9cfad23b6fb514e364522167053
但在 CMD.exe:
C:\>echo "Apple Pie" | git hash-object --stdin
bb3918d5053fea31fc9a58fae1e5bdeabe3ec647
在 PluralSight 视频中,我看到一个与 Mac 控制台不同的值:
在每种情况下,从 echo
传输的确切值是多少?
如果我转到其中一个在线 SHA1 生成器并输入字符串 Apple Pie
,我会得到一个不同的哈希值。从那些我得到:
8d69b7365f59237d3fb052c1f2f15ea33457fe51
据我了解:
使用 CMD :
echo Apple Pie|git hash-object --stdin
return 与PowerShell中的下面的想法相同
"Apple Pie" | git hash-object --stdin
也就是说:
157cb7be4778a9cfad23b6fb514e364522167053
@Mofi 似乎是对的,您可以使用以下命令在 Powershell 中重现 CMD 结果:
'"Apple Pie" ' | git hash-object --stdin
解释 Mac OS 一个:要获得 157cb7be4778a9cfad23b6fb514e364522167053,散列的真实字符列表是 'Apple Pie\r\n'
(带 carage return 换行符),在Mac 或 linux 就像命令行一样 'Apple Pie\r'
。
如果您想对此进行测试:将 'Apple Pie'
放入带有马符 return 的文本文件中,并将其另存为 Windows 文本样式 (CR+LF),然后使用git hash-object yourfile.txt
。然后保存为Linux样式(LF),再次测试,你会发现你的两个哈希值。
关于\r\n的部分。
"Apple Pie" | where {$_.length -eq 9}
表示字符串正好是9个字符长
对我来说,这是因为在你的情况下,管道位于两个 PowerShell 部件之间,管道传输一个对象。当管道位于 PowerShell 和外部 EXE 之间时,将添加 \r\n。这是一种使用用 C# 编写的小 exe 文件进行测试的方法:
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
QED ?
我在 PowerShell 中得到以下信息:
D:\> echo "Apple Pie" | git hash-object --stdin
157cb7be4778a9cfad23b6fb514e364522167053
D:\> "Apple Pie" | git hash-object --stdin
157cb7be4778a9cfad23b6fb514e364522167053
但在 CMD.exe:
C:\>echo "Apple Pie" | git hash-object --stdin
bb3918d5053fea31fc9a58fae1e5bdeabe3ec647
在 PluralSight 视频中,我看到一个与 Mac 控制台不同的值:
在每种情况下,从 echo
传输的确切值是多少?
如果我转到其中一个在线 SHA1 生成器并输入字符串 Apple Pie
,我会得到一个不同的哈希值。从那些我得到:
8d69b7365f59237d3fb052c1f2f15ea33457fe51
据我了解:
使用 CMD :
echo Apple Pie|git hash-object --stdin
return 与PowerShell中的下面的想法相同
"Apple Pie" | git hash-object --stdin
也就是说:
157cb7be4778a9cfad23b6fb514e364522167053
@Mofi 似乎是对的,您可以使用以下命令在 Powershell 中重现 CMD 结果:
'"Apple Pie" ' | git hash-object --stdin
解释 Mac OS 一个:要获得 157cb7be4778a9cfad23b6fb514e364522167053,散列的真实字符列表是 'Apple Pie\r\n'
(带 carage return 换行符),在Mac 或 linux 就像命令行一样 'Apple Pie\r'
。
如果您想对此进行测试:将 'Apple Pie'
放入带有马符 return 的文本文件中,并将其另存为 Windows 文本样式 (CR+LF),然后使用git hash-object yourfile.txt
。然后保存为Linux样式(LF),再次测试,你会发现你的两个哈希值。
关于\r\n的部分。
"Apple Pie" | where {$_.length -eq 9}
表示字符串正好是9个字符长
对我来说,这是因为在你的情况下,管道位于两个 PowerShell 部件之间,管道传输一个对象。当管道位于 PowerShell 和外部 EXE 之间时,将添加 \r\n。这是一种使用用 C# 编写的小 exe 文件进行测试的方法:
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
QED ?