为什么在提示符下输入相同的字符串而不是将其作为变量传递时得到不同的输出?

克星

有人可以向我解释为什么我输入相同的字符串时会看到不同的输出,一个是在Powershell提示下输入,另一个是在传递变量时输入。我想知道在提示符下输入字符串时如何格式化字符串,以产生与将变量作为变量传递时得到的输出相同的输出。

test.ps1

param (
    [Parameter(Mandatory=$true)]
    [String]
    $NewArgumentString
)

$NewArguments = (Write-Output $NewArgumentString | ConvertFrom-StringData)
$NewArguments

跑:

PS> $testString = "HOSTNAME = jburns-test`nIP = 127.0.0.1"
PS> .\test.ps1 -NewArgumentString $testString

Name                           Value
----                           -----
HOSTNAME                       jburns-test
IP                             127.0.0.1


PS> .\test.ps1

cmdlet a.ps1 at command pipeline position 1
Supply values for the following parameters:
NewArgumentString: HOSTNAME = jburns-test`nIP = 127.0.0.1

Name                           Value
----                           -----
HOSTNAME                       jburns-test`nIP = 127.0.0.1

在此处输入图片说明

HAL9256

这段代码对提示变量与传入变量的响应不同的原因是,因为我们正在处理解释字符串与文字字符串之间的差异aka单引号与双引号。

提示符下的字符串被视为文字字符串,而不是解释字符串。这就是为什么提示时您不能引用变量的原因。为了演示此示例的不同效果,让我们进行遍历,在该示例中,我们将传递的变量中的双引号替换为双引号,以模拟在提示符下写入字符串:

PS> $testString = "HOSTNAME = jburns-test`nIP = 127.0.0.1"
PS> $testString2 = 'HOSTNAME = jburns-test`nIP = 127.0.0.1'

PS> .\test.ps1 -NewArgumentString $testString

Name                           Value
----                           -----
HOSTNAME                       jburns-test
IP                             127.0.0.1


PS> .\test.ps1 -NewArgumentString $testString2

Name                           Value
----                           -----
HOSTNAME                       jburns-test`nIP = 127.0.0.1

在这里,我们看到确认单引号字符串的解释与提示的解释相同。什么真正是怎么回事是这两个字符串是不一样的。对于第一个双引号字符串,赋值后,PowerShell会将两个字符组合“`n”(0x96 + 0x6E)转换为单个换行符“ LF”(0x0A)字符。我们可以通过比较字符串长度来看到:

PS> $testString = "HOSTNAME = jburns-test`nIP = 127.0.0.1"
PS> $testString.Length
37

PS> $testString2 = 'HOSTNAME = jburns-test`nIP = 127.0.0.1'
PS> $testString2.Length
38

为了在示例中真实地复制我们的理论结果,让我们进入提示,将-n-“按位”字符串存储在变量中,方法是将n替换为不可打印的LF字符(只能通过使用ALT +数字键盘来实现)方法)ALT + 0010

PS> .\test.ps1

cmdlet a.ps1 at command pipeline position 1
Supply values for the following parameters:
NewArgumentString: HOSTNAME = jburns-test
IP = 127.0.0.1

Name                           Value
----                           -----
HOSTNAME                       jburns-test
IP                             127.0.0.1

瞧!我们已经复制了结果。PowerShell尚未损坏。我们对函数和参数传递的信念得以恢复!


顺便说一句,不建议将字符串传递到函数中并依靠函数将其转换为哈希表,因为正如您所演示的那样,这样做可能会导致不可预测的结果。相反,我直接将哈希表(类型[hashtable]直接传递给函数:

testHashTable.ps1

param (
    [Parameter(Mandatory=$true)]
    [hashtable]
    $MyHashTable
)

Write-Output $MyHashTable
PS> $testHashTable = @{ "HOSTNAME" = "jburns-test" ; "IP" = "127.0.0.1" }
PS> .\test.ps1 -MyHashTable $testHashTable

Name                           Value
----                           -----
IP                             127.0.0.1
HOSTNAME                       jburns-test

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么在Windows命令提示符下使用“ findstr”命令时,“ d:\ 0.0”没有子字符串“ D:\ 0.0”

来自分类Dev

如何在Windows命令提示符下对变量进行字符串替换?

来自分类Dev

给定相同的输入字符串,为什么这些base64编码输出不同?

来自分类Dev

命令提示符下的字符串

来自分类Dev

为什么我在Visual Studio 2019输出与admin dev cmd提示符之间得到了不同的MSBuild行为

来自分类Dev

当作为字符串传递时,为什么不相同的数组被视为相等?

来自分类Dev

为什么将字符串作为文件名而不是char *传递时出现错误?

来自分类Dev

为什么我会得到“隐含的评估”。将简单字符串传递给状态时考虑传递函数而不是字符串'?

来自分类Dev

从双向链接列表打印时,为什么我得到相同的字符串值但算术值不同

来自分类Dev

你能告诉我为什么我只收到 * 作为输出而不是最初输入的字符串作为解密的字符串吗?

来自分类Dev

从“ pactl”输出中提取字符串,并将其作为变量传递给shell脚本

来自分类Dev

当用户在命令提示符下选择任何字符串时,节点Js不能满足任何请求

来自分类Dev

在命令提示符下保存自定义提示字符串

来自分类Dev

为什么在Windows CMD提示符下清除PATH会立即将其关闭?

来自分类Dev

为什么我用.concat()和+ =用Java字符串得到不同的输出?

来自分类Dev

为什么输入“i”而不是“j”作为HashMap中的键时输出不同?

来自分类Dev

为什么RStudio源pdf输出与R提示符不同?

来自分类Dev

为什么命令提示符和PowerShell给出的输出结果与终端不同?

来自分类Dev

为什么命令会在提示符下而不是脚本中运行?

来自分类Dev

为什么在通过 SSH 连接到 docker 容器时,我会在提示符中得到 `$` 而不是 `user@hostname:~$`?我是否以用户身份登录?

来自分类Java

在Java中将命令提示符输出获取到字符串

来自分类Dev

如何使Windows命令提示符从命令输出返回子字符串

来自分类Dev

为什么我在 Python 中读取 csv 文件时得到的是字符串而不是字典?

来自分类Dev

为什么我得到“字符串不是函数”?

来自分类Dev

如何在命令提示符下修剪字符串?

来自分类Dev

字符串打印汇编语言程序未在命令提示符下执行

来自分类Dev

为什么我的PATH环境变量与命令提示符不同?

来自分类Dev

在sudo提示符下输入密码时的反馈

来自分类Dev

使用从Java程序调用的Windows命令提示符将具有多个连续空格的字符串作为参数传递给jar文件

Related 相关文章

  1. 1

    为什么在Windows命令提示符下使用“ findstr”命令时,“ d:\ 0.0”没有子字符串“ D:\ 0.0”

  2. 2

    如何在Windows命令提示符下对变量进行字符串替换?

  3. 3

    给定相同的输入字符串,为什么这些base64编码输出不同?

  4. 4

    命令提示符下的字符串

  5. 5

    为什么我在Visual Studio 2019输出与admin dev cmd提示符之间得到了不同的MSBuild行为

  6. 6

    当作为字符串传递时,为什么不相同的数组被视为相等?

  7. 7

    为什么将字符串作为文件名而不是char *传递时出现错误?

  8. 8

    为什么我会得到“隐含的评估”。将简单字符串传递给状态时考虑传递函数而不是字符串'?

  9. 9

    从双向链接列表打印时,为什么我得到相同的字符串值但算术值不同

  10. 10

    你能告诉我为什么我只收到 * 作为输出而不是最初输入的字符串作为解密的字符串吗?

  11. 11

    从“ pactl”输出中提取字符串,并将其作为变量传递给shell脚本

  12. 12

    当用户在命令提示符下选择任何字符串时,节点Js不能满足任何请求

  13. 13

    在命令提示符下保存自定义提示字符串

  14. 14

    为什么在Windows CMD提示符下清除PATH会立即将其关闭?

  15. 15

    为什么我用.concat()和+ =用Java字符串得到不同的输出?

  16. 16

    为什么输入“i”而不是“j”作为HashMap中的键时输出不同?

  17. 17

    为什么RStudio源pdf输出与R提示符不同?

  18. 18

    为什么命令提示符和PowerShell给出的输出结果与终端不同?

  19. 19

    为什么命令会在提示符下而不是脚本中运行?

  20. 20

    为什么在通过 SSH 连接到 docker 容器时,我会在提示符中得到 `$` 而不是 `user@hostname:~$`?我是否以用户身份登录?

  21. 21

    在Java中将命令提示符输出获取到字符串

  22. 22

    如何使Windows命令提示符从命令输出返回子字符串

  23. 23

    为什么我在 Python 中读取 csv 文件时得到的是字符串而不是字典?

  24. 24

    为什么我得到“字符串不是函数”?

  25. 25

    如何在命令提示符下修剪字符串?

  26. 26

    字符串打印汇编语言程序未在命令提示符下执行

  27. 27

    为什么我的PATH环境变量与命令提示符不同?

  28. 28

    在sudo提示符下输入密码时的反馈

  29. 29

    使用从Java程序调用的Windows命令提示符将具有多个连续空格的字符串作为参数传递给jar文件

热门标签

归档