【问题标题】:command line arguments in PowershellPowershell 中的命令行参数
【发布时间】:2011-03-24 00:56:13
【问题描述】:

所以问题是,当我运行我的基本脚本时,它只是反映在命令行上传入的内容,参数并没有按照我期望的方式分开。

基本代码是:

write-host "`$args`[0`] = $args[0]"
write-host "`$args`[1`] = $args[1]"
write-host "`$args`[2`] = $args[2]"

如果我将脚本称为

./script apples oranges bananas

我明白了

$args[0] = apples oranges bananas[0]
$args[1] = apples oranges bananas[1]
$args[2] = apples oranges bananas[2]

如果它很重要,我在 powershell 2.0 中这样做

【问题讨论】:

    标签: powershell powershell-2.0 command-line-arguments


    【解决方案1】:

    这是我在个人资料中使用的辅助函数:

    function Echo-Args
    {
        for($i=0;$i -lt $args.length;$i++)
        {
            "Arg $i is <$($args[$i])>"
        }
    }
    
    PS > Echo-Args apples oranges bananas
    Arg 0 is <apples>
    Arg 1 is <oranges>
    Arg 2 is <bananas>
    

    【讨论】:

      【解决方案2】:

      您需要像这样将变量包装到$(..) 中:

      write-host "`$args`[0`] = $($args[0])"
      write-host "`$args`[1`] = $($args[1])"
      write-host "`$args`[2`] = $($args[2])"
      

      这适用于任何不是简单标量变量的表达式:

      $date = get-date
      write-host "day: $($date.day)"
      write-host "so web page length: $($a = new-object Net.WebClient; $a.DownloadString('http://stackoverflow.com').Length)"
      write-host "$(if (1 -eq (2-1)) { 'is one' } else {'is not'} )"
      

      【讨论】:

        【解决方案3】:

        哇,好尴尬。

        例如,如果您将 $args[0] 括在双引号中,就像我在上面所做的那样,它将解释 $args 并停止,永远不会到达 [],因此打印出 $arg 或整个命令行参数数组。

        【讨论】:

          猜你喜欢
          • 2013-03-24
          • 2019-08-05
          • 2012-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-06
          • 1970-01-01
          相关资源
          最近更新 更多