スクリプトでは長いオプションを使おう
(matklad.github.io)- 多くのコマンドラインユーティリティは、短い形式のオプション(
-f)と長い形式のオプション(--force)をサポートしている - 短い形式は対話的な利用のためのものであり、スクリプトでは長い形式を使うことを推奨する
- たとえば、ターミナルでは
$ git switch -c my-new-branchと入力する。 - リリーススクリプトでは次のように書く:
try shell.exec("git fetch origin --quiet", .{});try shell.exec("git switch --create release-{today} origin/main", .{ .today = stdx.DateUTC.now() }, );
- 長い形式のオプションは、読者にとってはるかに説明的である
1件のコメント
Hacker Newsの意見
長いオプションを好むが、POSIXコマンドを移植性を保って呼び出す必要がある場合は、短いオプションだけが唯一の選択肢である。POSIXは長いオプションを規定していない
diffの仕様を参照できるgrepを呼び出す代わりに、libpcreのようなものを使うほうが効率的かもしれないgit、hg、rg、agなどの非POSIXユーティリティでは、長いオプションを使うのは合理的である文字列補間とコマンド実行を混在させるべきではない
execv(2)、execvp(2)などに直接渡すべきである長いオプションを使うべきだという点には同意するが、移植性を考慮しなければならない
すべてのオプションの後、動的引数の前に
--を使うのを忘れてはならないコマンドを呼び出す前に、コマンドの長さが
ARG_MAXより長いかどうかを確認すべきであるgrep --ignore-case --files-with-matches -- "hello" *.cCMD="grep --ignore-case --files-with-matches -- \"hello\" *.c"ARG_MAX=$(getconf ARG_MAX)CMD_LEN=${#CMD}if (( CMD_LEN > ARG_MAX )); thenecho "Error: Command length ($CMD_LEN) exceeds ARG_MAX ($ARG_MAX)." >&2exit 1fieval "$CMD"# 警告、ファイル名を評価するこの方法に同意する。もう一つの利点は、オプションが何をするのかをmanページでgrepしやすくなることだ
スクリプトを他のPOSIXシステムへ移植可能にしたいなら、短いオプションを使わなければならないかもしれない
オプションは別々の行に置き、追跡や
git blameをしやすくすべきであるスクリプトを書くときの基本ルールの一つである。長いオプションが使えるなら使うべきだ
長い形式のオプションは読者にとってはるかに説明的である