getopt 在带有短选项的 MacOS 下无法按预期工作

问题描述 投票:0回答:1

我有以下命令:

command.sh -b=FOO

我正在尝试用以下内容解析它:

getopt "m::b::" "$@"

Linux下,结果为:

-b =FOO -- command.sh

MacOS下,结果为:

-- command.sh -b=FOO
。所以它根本没有被解析。我尝试了
-bFOO
-b FOO
但结果相同,它没有被解析。

如何解决?我需要一个跨平台的 bash 解决方案,它可以在 Mac 和 Linux 上运行。

bash macos getopt
1个回答
0
投票

getopt
是一个外部实用程序和特定版本,因此您需要将 Mac 上的版本与您在 Linux 上习惯使用的版本相匹配。
相反,使用内置的 getopts。它是便携式的,开箱即用,可以在任何 POSIX shell 中使用。

例子:

while getopts "m::b::" opt; do
  case ${opt} in
    m) # do 'm' thing
      echo M
      ;;
    b) # do 'b' thing
      echo B
      ;;
  esac
done
© www.soinside.com 2019 - 2024. All rights reserved.