はじめに
これは環境変数などをexportするようなスクリプトを書く場合の方法です
本題
とあるアプリのシェルスクリプトに個人的に面白いと感じたヘルプやバージョンのメッセージを実装している例があったので,紹介する.(ここに著作権は無いはず...)
その書き方の特徴はメッセージの内容をコメントアウトした状態で利用している点である.
script.sh
export FILENAME=$(basename $0)
## file : ${FILENAME}
## version : 3.14
#% help info brbrbrbr
case $1 in
v) # version
sed -n 's/^##//p' $0 | envsubst | less
esac
実行結果
$ ./script.sh -v
file : script.sh
version : 3.14
"-v"のオプションをつけたときは,"##"とコメントアウトしている部分が表示される.
そして, FILENAME という環境変数が展開されて出力される.
これの面白い点は
- コメントアウトされているものを出力で利用している点
- "envsubst"によって,コメントアウト内の環境変数が展開されて出力する点
この他にもヘルプなどでは別のコメントアウト方法("#%" etc)をすれば,
多種多様なオプションの出力に対応できる.
最後に
普通にスクリプト内のただの変数をsedで表示できる方法がないかなぁ
追記
sed -n 's/^##//p' $0
より
awk -F' ' '/^##/{print $2}' $0
の方が理解しやすいか?