- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在研究PowerShell脚本语言时,我尝试使用“写输出”命令来显示变量。
我使用另一种方法来创建变量。
例:$myvariable = 0x5555
Set-Variable -Name myvariable2 -Value 0x5555
这两个变量的数据类型为Int32。
当我使用以下命令时,Write-Output $myvariable $myvariable2
结果是21845
和0x5555
。
这两个变量之间有什么区别?
如何显示格式结果,例如printf %d %x
?
最佳答案
PetSerAl像以前一样多次在评论中给出了关键的指针(后来帮助改进了这个答案):
从PowerShell Core 6.2.0起编写。
PowerShell会将看起来像数字的无引号的文字参数解析为数字,并将其包装在“半透明”的[psobject]
实例中,其目的还在于保留指定为字符串的确切参数。
半透明的意思是生成的$myVariable2
:
[int]
实例-用于计算;例如,$myVariable2 + 1
正确返回21846
.GetType()
或通过Get-Member
cmdlet询问其类型时,它显示该数字。换句话说:在这种情况下,PowerShell假装没有包装器(有关变通方法,请参见下文)。 Out-*
cmdlet(例如Out-File
(但不是Set-Content
)和Format-*
cmdlet)时,-f
, PowerShell's format operator格式化
String.Format()
method;例如'The answer is {0}' -f 42
等效于[string]::Format('The answer is {0}', 42)
)。 "$myVariable2"
)中的字符串,当您调用.ToString()
方法($myVariable2.ToString()
)和Set-Content
(因此也)时,它的行为不一样。 1.0
之类的参数可以解释为版本字符串。或作为浮点数。
-Value
和
Set-Variable
cmdlet的
New-Variable
参数是-必不可少的
[object]
类型,因为它必须能够接受任何类型的值,并且这些cmdlet没有可让您指示所需数据类型的参数。
-Value
中,强制将
(...)
参数视为表达式的结果而不是未引用的文字参数:
# Due to enclosing in (...), the value that is stored in $myvariable2
# is *not* wrapped in [psobject] and therefore behaves the same as
# $myvariable = 0x55555
Set-Variable -Name myvariable2 -Value (0x5555)
$myvariable2
的按需值(value):
# OK: $myvariable isn't wrapped in [psobject], so formatting it as a
# hex. number works as expected:
PS> 'hex: 0x{0:x}' -f $myvariable
hex: 0x5555 # OK: Literal '0x' followed by hex. representation of the [int]
# !! Does NOT work as expected, because $myvariable2 is treated as a *string*
# !! That is, {0:x} is effectively treated as just {0}, and the string
# !! representation stored in the [psobject] wrapper is used as-is.
PS> 'hex: 0x{0:x}' -f $myvariable2
hex: 0x0x5555 # !! Note the extra '0x'
# Workaround 1: Use a *cast* (with the same type) to force creation of
# a new, *unwrapped* [int] instance:
PS> 'hex: 0x{0:x}' -f [int] $myvariable2
hex: 0x5555 # OK
# Workaround 2: Access the *wrapped* object via .psobject.BaseObject.
# The result is an [int] that behaves as expected.
PS> 'hex: 0x{0:x}' -f $myvariable2.psobject.BaseObject
hex: 0x5555 # OK
[psobject]
包装的值:
-is [psobject]
:
PS> $myvariable -is [psobject]
False # NO wrapper object
PS> $myvariable2 -is [psobject]
True # !! wrapper object
[Type]::GetTypeArray((, $myvariable2))
,它绕过了PowerShell的“包装包裹”技巧。)
01.2
之类的参数文字会立即解析为数字-在这种情况下为
[double]
,如果按原样使用,则会在输出上产生不同的表示形式,因为-一次解析为数字-默认输出格式应用于输出(其中数字必须再次转换为字符串):
PS> 01.2
1.2 # !! representation differs (and is culture-sensitive)
01.2
与
'01.2'
)从字符串中消除数字的歧义,但命令参数通常不需要这样做,这与传统Shell中不需要的方式相同。)
[psobject]
包装器来捕获原始字符串表示形式并将其用于输出。
1.2
而不是最初传递的
01.2
)。
PS> & { param($foo) $foo.GetType().Name; $foo } -foo 01.2
Double # parsed as number - a [double]
01.2 # !! original string representation, because $foo wasn't typed
$foo
是一个无类型的参数,这意味着将使用PowerShell在初始解析文字01.2
时推断出的类型。 { ... }
))没有声明$foo
的参数类型,隐式使用的[psobject]
包装器在输出中显示了原始字符串表示形式。 关于powershell - 在PowerShell中 “$myvariable =”和Set-Variable有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55194805/
平时很少在jquery中用到this。查看代码时发现用到了,就调试出this的值,心想原来如此。还是挺有用的。这里总结一下this与$(this)的区别和使用。 $(this)生成的是什么?
使用单例类和应用程序范围的托管 bean 来保存应用程序数据有区别吗? 我需要查找某些 JNDI 资源,例如远程 bean 接口(interface),因此我为自己编写了一个单例来缓存我的引用并且只允
如果您仔细查看包含的图片,您会注意到您可以使用 Eclipse IDE 重构 Groovy 代码并将方法转换为闭包,反之亦然。那么,闭包到底是什么,它与方法有什么不同呢?有人可以举一个使用闭包的好例子
vagrant box repackage有什么区别( docs ) 和 vagrant package ( docs )? 我意识到 vagrant package仅适用于 VirtualBox 提
我想看看是否有人可以解释为什么以下代码适用于 valueOf 但不适用于其他代码。 import java.math.BigDecimal; public class Change { publ
这个问题已经有答案了: 已关闭12 年前。 Possible Duplicates: What is Closures/Lambda in PHP or Javascript in layman te
This question already has answers here: Vagrant, Docker, Puppet, Chef (3个答案) 2年前关闭。 docker和chef有什么共同
以下代码在95%的机器上产生相同的输出,但是在几台机器上却有所不同。在 Debug模式下,输出: Changing from New to Fin OK 但在 Release模式下: Changing
////Creating Object var Obj; // init Object Obj= {}; 它们之间有什么区别两个? 有没有可能把它变成一个单行? 这样使用有什么好处吗?
我想找出定时器服务之间的区别。我应该使用哪个以及何时使用。我正在使用 Jboss 应用服务器。 1) java.ejb.Schedule。 @Schedule注解或配置自xml。 2) javax.e
我发现在 C++ 中可以通过三种不同的方式将对象传递给函数。假设我的类(class)是这样的: class Test { int i; public: Test(int x);
有什么区别。 public class Test { public static void main(String args[]) { String toBeCast = "c
如果我有一列,设置为主索引,设置为INT。 如果我不将其设置为自动递增,而只是将唯一的随机整数插入其中,与自动递增相比,这是否会减慢 future 的查询速度? 如果我在主索引和唯一索引为 INT 的
这两种日期格式有什么区别。第一个给出实际时间,第二个给出时间购买添加时区偏移值。 NSDateFormatter * dateFormatter = [[NSDateFormatter alloc]
如果有一个函数,请说foo: function foo() { console.log('bar'); } 那么在 JavaScript 中,从另一个函数调用一个函数有什么区别,如下所示: f
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
代码是什么: class Time { private: int hours; int minutes; int seconds; pu
我知道这是非常基本的,但有人介意解释一下这两个数组声明之间的区别吗: #include array myints; ...和: int myints[5]; ...以及为什么 myints.size
我学会了如何根据 http://reference.sitepoint.com/css/specificity 计算 css 特异性但是,基于this reference,我不明白伪类(来自c)和伪元
为什么在运行 2) 时会出现额外的空行?对我来说 1 就像 2。那么为什么 2) 中的额外行? 1) export p1=$(cd $(dirname $0) && pwd) #
我是一名优秀的程序员,十分优秀!