【问题标题】:accessing the $args array in powershell在 powershell 中访问 $args 数组
【发布时间】:2012-09-07 22:26:18
【问题描述】:

我有一个如下所示的测试 powershell V2 脚本:

    function test_args()
    {
      Write-Host "here's arg 0: $args[0]"
      Write-Host "here's arg 1: $args[1]"
    }


    test_args

如果我从 powershell 命令提示符调用它,我会在屏幕上看到它:

here's arg[0]: [0]

here's arg[1]: [1]

不是我想要的。看来我必须先将 $args[0] 和 $args[1] 复制到脚本中的新变量才能使用它们?如果我这样做,我可以正常访问。

有没有办法在我的代码中访问索引的 $args?我尝试以各种方式在它们周围使用花括号,但没有运气。

我最终将转向命名参数,但我正在处理的脚本(不是这个演示脚本)是批处理文件的直接端口。

【问题讨论】:

  • 最终,这是字符串扩展(插值)语法问题,正如接受的答案中所解释的那样。简而言之:要嵌入诸如$args[0] 之类的表达式 - 而不是诸如$var 之类的单纯变量引用——您需要$(...),即子表达式运算符;尔格:"... $($args[0]) ..."。有关 PowerShell 字符串扩展规则的简明摘要,请参阅 this answer

标签: powershell args


【解决方案1】:

试试这个:

function test_args()
{
  Write-Host "here's arg 0: $($args[0])"
  Write-Host "here's arg 1: $($args[1])"
}

test_args foo bar

请注意,它是$args,而不是$arg。此外,当您在字符串中使用 PowerShell 变量时,PowerShell 只会替换该变量的值。您不能直接使用$args[0] 之类的表达式。但是,您可以将表达式放在双引号字符串内的 $() 子表达式组中,以让 PowerShell 计算表达式,然后将结果转换为字符串。

【讨论】:

  • 谢谢 Keith——我在从编辑器翻译为 SO 时更改了我的 sn-p 以更正我的错字。我想我的问题是,我需要将 $arg[0] 和 [1] 作为参数传递给 test_args,还是函数本身可以访问 $args 数组?
  • 函数总是可以访问 $args。它将包含任何未映射到已定义函数参数的参数。如果没有参数或所有参数都映射到函数参数,例如function foo($param1, $param2){} 然后 $args 将是一个空数组。
  • 有时我必须使用Out-String 来获得子表达式的输出以根据需要显示......例如在使用哈希表时。例如,假设 arg 1 是一个哈希表:Write-Host "here's arg 1: $($args[1] | Out-String)"
  • 关于$args 可用性的小警告:高级 函数(或脚本)- 即那些param() 块用[CmdletBinding()] 属性和/或其参数修饰的函数用[Parameter()] 属性装饰 - 基本上不允许调用,除非 all 参数传递绑定到 declared 参数。换句话说:$args 不适用于高级函数和脚本。
  • 我在函数 n{notepad $args} 中使用 $args 并使用 n argg_file 调用它。这好像是PS功夫?
猜你喜欢
  • 2018-09-08
  • 1970-01-01
  • 2014-11-09
  • 2017-11-04
  • 2021-12-05
  • 2021-08-31
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多