getoptsを使用するときのOPTARGの奇妙な先行スペース

getoptsを使用するときのOPTARGの奇妙な先行スペース

私は私が経験している問題を調査するのにかなりの時間を費やしましたが、getoptsチュートリアルのどれもgetoptsを使用するときにOPTARGの先行スペースに言及しません。

Bash(UbuntuとOSX)で次のコマンドを実行します。

OPTIND=1 && getopts ":n:" opt "-n 1" && echo "OPTARG: '$OPTARG'"

次のようにエコーされます。

OPTARG: ' 1'

しかし、これを行うと:

OPTIND=1 && getopts ":n:" opt "-n1" && echo "OPTARG: '$OPTARG'"

それから私が期待するものを得ます。

OPTARG: '1'

私がオンラインで読んだことから:

通常1 つ以上のスペースがオプション文字と値を区別します。;しかし、getoptsは文字の直後の値も処理します。[引用]

上記の引用がgetoptsに一般的に適用されている場合、OPTARGで先行スペースを取得するには私が間違っていますか?

答え1

"-n -1"前のスペースは保持されるため、周囲の二重引用符を省略する必要があります1

OPTIND=1 && getopts ":n:" opt -n 1 && echo "OPTARG: '$OPTARG'"

以下を提供します。

OPTARG: '1'

関連情報