aloerina01 / til

1日1つだけ強くなる
6 stars 0 forks source link

2018/12/27 Shell Style Guide 完結編 #88

Open aloerina01 opened 5 years ago

aloerina01 commented 5 years ago

Features and Bugs

ファイル名のワイルドカード

ワイルドカードを使うときは明示的なパスを利用すること。*のかわりに./*を使う等。

eval

evalは使わない。

while

whileループよりforループかプロセス置換を使うべき。whileはsub processで実行されるので、ループ内での変更を親に伝達できないから。 (※プロセス置換はPOSIX互換ではないので注意)

プロセス置換のメリットは、whileと違って明示的にsubshellで実行されること。

命名規則

Function Names

スネークケース。ライブラリの場合は::で区切る。関数名の後には括弧をつける。functionをつけるかどうかはOptionalなのでプロジェクトで統一する。

# Single function
my_func() {
  ...
}

# Part of a package
mypackage::my_func() {
  ...
}

Variable Names

FunctionNameと同様。 ループで使う変数名はループ対象と関連性のある命名にする。

for zone in ${zones}; do
  something_with "${zone}"
done

定数、環境変数

ファイルの先頭で定義し、大文字のアンスコつなぎにする。 getoptsなどで受け取った値も定数化したほうがよくて、そういうものは分岐の中で定数化するよりgetopts直後とかにreadonlyexportするのが良いと思うよ。

VERBOSE='false'
while getopts 'v' flag; do
  case "${flag}" in
    v) VERBOSE='true' ;;
  esac
done
readonly VERBOSE

ファイル名

スネークケース。

readonly 変数

readonlydeclare -rを使う。 グローバル変数は広く使われるものなので、エラーハンドリングを実装することが重要。またreadonlyの意図で定義した変数はちゃんとそのことを明示すること。

zip_version="$(dpkg --status zip | grep Version: | cut -d ' ' -f 2)"
if [[ -z "${zip_version}" ]]; then
  error_message
else
  readonly zip_version
fi

ローカル変数

関数固有の変数はlocalを使って宣言する。宣言と代入は別の行に書く。

my_func() {
  local my_var;
  my_var="$(my_func2)" || return
}

Function Location

すべての関数を定数のすぐ下にまとめて書く。呼び出し部分を関数実装箇所に混ぜない。

Calling Commands

aloerina01 commented 5 years ago

過去回

aloerina01 commented 5 years ago

その他参考資料