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

Ale*_*din 2 macos bash getopt

我有以下命令:command.sh bar -b=FOO

我试图用以下内容来解析它:getopt "m::b::" "$@"

在Linux下,结果是:-b =FOO -- command.sh bar

在 MacOS 下,结果是:-- command.sh bar -b=FOO。所以根本没有解析它。我尝试过-bFOO-b FOO但结果相同,它没有被解析。

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

sta*_*Man 7

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
Run Code Online (Sandbox Code Playgroud)

  • @AlexanderPravdin 它也是一个内置的“zsh”。Zsh 是 macOS 上的默认 shell。它与 bash 几乎相同,但如果您不了解 zsh,“几乎”部分可能会给您带来一些问题。 (2认同)