![Getoptsオプション処理、ハイフンのない[FILE]を追加できますか?](https://linux33.com/image/43088/Getopts%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%E5%87%A6%E7%90%86%E3%80%81%E3%83%8F%E3%82%A4%E3%83%95%E3%83%B3%E3%81%AE%E3%81%AA%E3%81%84%5BFILE%5D%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F.png)
私は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
設定されます。$OPTIND
FILE
答え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 ...)