首页 > 解决方案 > 使用 powershell 函数的返回值

问题描述

> function h2n($num) {return [int]$num.replace(",", "")}

> h2n("1,341,096") | get-member



   TypeName: System.Int32

Name        MemberType Definition
----        ---------- ----------
CompareTo   Method     int CompareTo(System.Object value), int CompareTo(int value), int IComparable.CompareTo(System.Object obj), int IComparable[int].Com... Equals      Method     bool Equals(System.Object obj), bool Equals(int obj), bool IEquatable[int].Equals(int other)
GetHashCode Method     int GetHashCode()
GetType     Method     type GetType()
GetTypeCode Method     System.TypeCode GetTypeCode(), System.TypeCode IConvertible.GetTypeCode()
ToBoolean   Method     bool IConvertible.ToBoolean(System.IFormatProvider provider)
ToByte      Method     byte IConvertible.ToByte(System.IFormatProvider provider)
ToChar      Method     char IConvertible.ToChar(System.IFormatProvider provider)
ToDateTime  Method     datetime IConvertible.ToDateTime(System.IFormatProvider provider)
ToDecimal   Method     decimal IConvertible.ToDecimal(System.IFormatProvider provider)
ToDouble    Method     double IConvertible.ToDouble(System.IFormatProvider provider)
ToInt16     Method     int16 IConvertible.ToInt16(System.IFormatProvider provider)
ToInt32     Method     int IConvertible.ToInt32(System.IFormatProvider provider)
ToInt64     Method     long IConvertible.ToInt64(System.IFormatProvider provider)
ToSByte     Method     sbyte IConvertible.ToSByte(System.IFormatProvider provider)
ToSingle    Method     float IConvertible.ToSingle(System.IFormatProvider provider)
ToString    Method     string ToString(), string ToString(string format), string ToString(System.IFormatProvider provider), string ToString(string format, ... ToType      Method     System.Object IConvertible.ToType(type conversionType, System.IFormatProvider provider)
ToUInt16    Method     uint16 IConvertible.ToUInt16(System.IFormatProvider provider)
ToUInt32    Method     uint32 IConvertible.ToUInt32(System.IFormatProvider provider)
ToUInt64    Method     uint64 IConvertible.ToUInt64(System.IFormatProvider provider)


> h2n("1,341,096")  * 0
1341096

为什么最后一个表达式不返回 0?

标签: functionpowershell

解决方案


您可以 [int](h2n('1,341,096')) * 0在调用函数时输入。

正如上面的评论者建议的那样,您应该输入 (h2n '1,341,096') * 0。

这样做的原因是因为在 Powershell 中,在 shell 上调用函数时,您不会在括号中输入函数参数。取而代之的是,您使用终端样式的语法,并用空格和不带括号的方式分隔参数。

那么当你进入时会发生什么h2n('1,341,096') * 0?它执行此函数调用:

(h2n '1,341,096' * 0)

那只是向你的函数传递了 3 个参数,第一个是 1,341,096,第二个是 *,第三个是 0。这绝对不是你想要的。

这将与h2n('1,341,096', *, 0);使用普通编程语言进行功能等效。

相反,你用一个空格来调用你的函数,h2n '1,341,096'然后用括号括起来,这样你就可以在内联表达式中使用它。


推荐阅读