Bashのshell scriptで引数処理をするときにdocoptsが便利すぎた件
June 5, 2019, 7:41 a.m. edited Dec. 21, 2019, 5:20 a.m.皆さん,Bashでシェルスクリプトを書くとき,引数処理をどのようにしていますか?
- getopts
- getopt
- 自前で実装
この辺ですかね.検索してもだいたいこんな感じでした1.
2019年,令和の時代にもなって自前で実装という選択肢が出てくるのは辛すぎませんか???
それではこちらをご覧ください↓
#!/bin/bash
eval "$(docopts -V - -h - : "$@" <<EOF
Usage:
./hoge.sh
./hoge.sh <foo> [--bar=<bar>]
./hoge.sh --help
./hoge.sh --version
Options:
-h, --help Show this screen.
--version Show version.
-b <bar>, --bar=<bar> Set bar option [default: 5].
----
v1.0.0
Copyright (C) your name
There is NO WARRANTY.
EOF
)"
if [ -z "${foo}" ]; then
printf "No argument is detected.\n"
else
printf "foo is ${foo}, bar is ${bar}.\n"
fi
実行結果
$ ./hoge.sh --help
Usage:
./hoge.sh
./hoge.sh <foo> [--bar=<bar>]
./hoge.sh --help
./hoge.sh --version
Options:
-h, --help Show this screen.
--version Show version.
-b <bar>, --bar=<bar> Set bar option [default: 5].
$ ./hoge.sh --version
v1.0.0
Copyright (C) your name
There is NO WARRANTY.
$ ./hoge.sh
No argument is detected.
$ ./hoge.sh 20
foo is 20, bar is 5.
$ ./hoge.sh 20 -b 10
foo is 20, bar is 10.
あ...ありのまま 今 起こった事を話すぜ!
「おれは hoge.shの使い方を書いていたと思ったら いつのまにか引数処理を終えていた」
な… 何を言っているのか わからねーと思うが
おれも 何をされたのか わからなかった…
頭がどうにかなりそうだった… 文芸的プログラミングだとかコメントだとか
そんなチャチ(前者に関してはチャチではないし、後者も大切だよ)なもんじゃあ 断じてねえ
もっと恐ろしいものの片鱗を 味わったぜ…
_人人人人人人人人_
> 圧倒的手軽さ <
 ̄Y^Y^Y^Y^Y^Y^Y ̄
これはdocoptsによって実現されています3.そうです,あのPythonを筆頭に各言語で圧倒的に手軽な引数処理を実現するdocoptプロジェクトの1つです.
インストール方法は
$ pip install docopts
だけです4.圧倒的手軽(ry
使い方としては,上に挙げた例のように規格に則った説明文を書いてdocopts
に渡すだけです.そうすれば,${foo}
や${bar}
といった変数に値が入ります.
配列だとかもっと詳しい使い方については,公式ホームページを参照してください.
それでは,良い引数処理ライフを!!
Tags
- #Python (24)
- #量子力学 (13)
- #Unity (11)
- #量子情報 (10)
- #Outer Wilds (9)
- #AoE2 (8)
- #Mac (8)
- #数学 (7)
- #Quantum Zoo (6)
- #意識 (5)
- #NumPy (5)
- #Bash (5)
- #Linux (5)
- #相対論 (4)
- #シミュレーション (4)
- #Docker (4)
- #Android (4)
- #Qiskit (4)
- #Rust (3)
- #PyO3 (3)
- #GitHub (3)
- #Django (2)
- #情報理論 (2)
- #LaTeX (2)
- #AR (2)
- #Git (2)
- #iOS (2)
- #C++ (2)
- #正規表現 (2)
- #電磁気学 (1)
- #Google Drive (1)
- #Overleaf (1)
- #Let's Encrypt (1)
- #ポケモン (1)
- #AdMob (1)
- #Autoya (1)
- #docopt (1)
- #SymPy (1)
- #AWS (1)
- #Twitter (1)
- #URP (1)
- #iMovie (1)
- #論文 (1)
- #PyTorch (1)
- #C# (1)