bash で動かすシェルスクリプトのひながた
code:bash
set -o errexit
set -o pipefail
set -o noclobber
set -o nounset
set -o xtrace
# ここに処理を書く
# shellcheck で Lint かける
# /usr/bin/env hack はあんまり意味がないので使わない
オプション
errexit: 0 以外で exit したコマンドがあったら即殺す
pipefail: パイプの後続のコマンドが失敗したときに殺す
noclobber: 意図しないリダイレクトによるファイルの上書きを防ぐ
nounset: 未定義の変数を使おうとしたときに即殺す
xtrace: 展開済みのコマンド列を出力する (いらないときはいらない)
規約的なもの
MUST: 変数名や関数名はスネークケースで書く。
MUST: 原則変数は immutable であるとし、readonly 修飾子をつけて宣言・初期化する。
SHOULD: 配列以上に高度なデータ型を扱いたくなった時点でシェルスクリプトをやめて別のプログラミング言語が使えないか検討する (重要)。 SHOULD: コマンドのオプションには、原則長いスタイルのオプションを使う。
-v ではなくて --version
MUST: なるべく変数のスコープは小さくする。他のスクリプト言語の感覚で初期化すると、意図せずグローバル変数になることもあるため、local 修飾子を活用する。
MUST: 理由がなければ if などでは test コマンドや [ コマンドではなく、bash の組み込み構文の if [[ exp ]]; then のようなスタイルで書く。 こちらのほうが直感的に扱える。
SHOULD: もう 2019 年なので、原則として拡張正規表現を使えるコマンドではそれを利用する。ただし、互換性を求める場合にはその限りではない。 grep --extended-regexp や sed --regexp-extended など。