shell - PowerShell 中类似 GetOpt 的行为

标签 shell powershell command-line-arguments

我正在将 Korn shell 脚本转换为 PowerShell。现有脚本利用 getopt 命令并使用区分大小写的命令行参数(例如,v 的行为与 V 不同)。

set -- `getopt T:ZISedDACkpWhzLJMl:n:g:x:r:R:V:v:N:G:o:m:O: $*`

for c in $*
 do
   case $c in
    -h)        echo $USAGE
    --)       shift; break;;
    esac
done

对于 PowerShell 版本,我希望保持参数名称和行为完全相同。我一直在研究命名函数参数的可能性;但是,PowerShell 不区分大小写,并且不允许重复的参数名称。所以,这是行不通的。

function dowork ()
{
    param
    (
      [string]$V,
      [string]$v,
    )
    ...
}

我可以利用自动 $args 变量,其中包含未声明参数的数组;但是,我不知道 PowerShell 中是否有与 getopt 命令等效的命令。有没有另一种方法可以在不实现我自己的 getopt 的情况下完成此任务?

最佳答案

getopt 所做的事情在 PowerShell 中无法直接实现,我宁愿建议不要直接重新创建它。正如您已经注意到的,参数大写并不重要,解析也有很大不同,不区分短选项和长选项,而是允许您缩短任何参数,只要它保持明确即可。

我的建议是看看您是否可以为选项提供有意义的名称,以便与 PowerShell 的参数解析一起使用,而不是反对它。然后,您可以包含有关 getopt 样式参数如何映射到 PowerShell 的文档(也许还提供一个简单的脚本在两者之间进行转换)。

关于shell - PowerShell 中类似 GetOpt 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23016298/

相关文章:

c - 使用shell脚本打印c文件中的函数名称?

linux - Bash 脚本在文件中传递

azure - 使用 Microsoft.Graph PowerShell 模块创建 Azure AD 应用程序时无法设置 OAuth2 权限范围

java - 在java中接受日期类型命令行参数

javascript - 分割空格避免双引号 JS 字符串 : from 'a "b\\"c" d ' to [' a' ,'"b\\"c"' ,'d' ]

java - 如何增加 Windows 命令提示符中的命令行参数大小或限制

c - 列出 C 中的目标目录

linux - 在shell脚本中最后一次出现单词之前获取子字符串

powershell - 使用 PowerShell 列出带有标记名和标记值的所有 Azure 资源

powershell - 在 PowerShell 中创建文件夹别名