Getoptsオプション処理、ハイフンのない[FILE]を追加できますか?

Getoptsオプション処理、ハイフンのない[FILE]を追加できますか?

私はgetopts高度なオプション解析を必要とするすべてのスクリプトを使用しており、動作します。とで構成されるdash標準の基本的な使い方に精通してgetoptsいます。 [-x][-x OPTION]

そのようなオプションを解析することは可能ですか?

 dash_script.sh FILE -x -z -o OPTION
 ## Or the inverse?
 dash_script.sh -x -z -o OPTION FILE

答え1

スクリプトパラメータは通常オプションの後に続きます。他のコマンド(またはcp)を見てみると、lsこれが実際に真実であることがわかります。

したがって、処理するには、次のようにします。

dash_script.sh -x -z -o OPTION FILE

getopts次のように使用できます。

while getopts xzo: option
do
    case "$option" in
        x) echo "x";;
        z) echo "z";;
        o) echo "o=$OPTARG";;
    esac
done
shift $(($OPTIND-1))
FILE="$1"

オプションが処理された後、オプションではなく最初の引数(この場合)のインデックスにgetopts設定されます。$OPTINDFILE

答え2

Getoptはパラメータを並べ替え、オプションではなくすべてのパラメータを次の後ろに配置します--

$ getopt -o a: -- nonoption-begin -a x nonoption-middle -a b nonoption-end
-a 'x' -a 'b' -- 'nonoption-begin' 'nonoption-middle' 'nonoption-end'

オプションではなく引数が最初にあるかどうかを知る必要がある場合は、呼び出す$1前にオプションであることを確認し、そうでない場合は抽出できますgetopt

if [ ${1#-} = $1 ]; then
  NONOPTION=$1
  shift
fi
ARGS=$(getopt ...)

関連情報