これを使用しています:
たとえば、./imgSorter.sh -d directory -f format
スクリプト”の内容は次のとおりです:
#!/bin/bash while getopts ":d:f:" opt; do case $opt in d) echo "-d was triggered with $OPTARG" >&2 ;; f) echo "-f was triggered with $OPTARG" >&2 ;; \?) echo "Invalid option: -$OPTARG" >&2 exit 1 ;; :) echo "Option -$OPTARG requires an argument." >&2 exit 1 ;; esac done
使用例:
$ ./imgSorter.sh -d myDir -d was triggered with myDir
OK
$ ./imgSorter.sh -d -f myFormat -d was triggered with -f
NOK:-で始まる文字列がフラグとして検出されないのはどうしてですか?
回答
getopts
に-d
オプションは引数を取る必要があり、コマンドラインで-d -f myformat
を使用します。これは、「-f
が引数I “-d
オプションに与えています。
これはコードのエラーではなく、コマンドラインでのスクリプトの使用法のエラーです。
コードは、オプション引数が正しいこと、およびすべてのオプションが適切な方法で設定されていることを確認する必要があります。
おそらく
-d
オプションがオプションであり、変数にデフォルト値を使用する場合<上記のコードのdivid = "4d56de94ef">
では、dir
をwhile
ループ。
コマンドラインオプションは、引数を取ることも取らないこともできません。
コメント
- ありがとうございます@Kusalananda、私はgetoptsがすべてをとったと誤って想定しました-フラグの始まりのために。