
些細なタスクが一目で登場しました。起動時にさまざまなオプションを使用してスクリプトを記述することです。 nameとdirの2つのオプションのみを処理する必要があるとします。 そして、私たちのオプションが短いのであれば、タスクは本当に簡単です。 しかし、長いオプションを使用したいという強い欲求がある場合、書き込みはなくなります:getopts(最初に使用される予定でした)は、bashではまったく良くありません。
kshではすべてが大丈夫です:
しかし、bashがあるため、残念ながらため息をつき、この状況から脱出しようとします。
Vriantの解析自体は魅力的ですが、つまらなくて面白くありません。エラー、例外、その他多くのことを処理することを考える必要があるたびに。 はい、そして、そのようなスクリプトを書くとき、毎回車輪を再発明したくありません。
短い名前でgetoptsを使用して、長い名前をサポートすることができます。
しかし、このようなソリューションを機能させるために、言語は向きを変えません。同時にサポートされるのは1つの長いオプション(パラメーターで指定された最初のオプション)のみで、2番目のオプションは無視されます。
bashではgetopts_longがまだ実装されていないことを不満に思っていますが、Googleはこれを個別に行うことを提案しています
。getopts_long関数をダウンロードしてスクリプトに含めます。
それは幸せそうに思えますが、さらにエレガントな解決策がありました。解析オプションに加えて値をチェックできる、より高度な
shflagsライブラリです。 文字列、論理変数、整数、非整数は区別されます(シェルには非整数の概念がないため、本質的には文字列ですが、形式の正確さはチェックされます。これは、DEFINE_string | _boolean | _float | _integerおよびオプションの長い名前に応じてオプションの変数を独立して呼び出し、さまざまなシェル(sh、bash、dash、ksh、zsh)の束もサポートします。美しさのみ。 :
ただし、このソリューションには軟膏もあります。ライブラリはオプションの解析にgetoptを使用し、インターネットで言われているように、曲げられていないgetoptは長いオプションをサポートしていません。 そのため、互換性の問題がある可能性があります。