Open aloerina01 opened 5 years ago
ワイルドカードを使うときは明示的なパスを利用すること。*のかわりに./*を使う等。
*
./*
evalは使わない。
whileループよりforループかプロセス置換を使うべき。whileはsub processで実行されるので、ループ内での変更を親に伝達できないから。 (※プロセス置換はPOSIX互換ではないので注意)
プロセス置換のメリットは、whileと違って明示的にsubshellで実行されること。
スネークケース。ライブラリの場合は::で区切る。関数名の後には括弧をつける。functionをつけるかどうかはOptionalなのでプロジェクトで統一する。
::
function
# Single function my_func() { ... } # Part of a package mypackage::my_func() { ... }
FunctionNameと同様。 ループで使う変数名はループ対象と関連性のある命名にする。
for zone in ${zones}; do something_with "${zone}" done
ファイルの先頭で定義し、大文字のアンスコつなぎにする。 getoptsなどで受け取った値も定数化したほうがよくて、そういうものは分岐の中で定数化するよりgetopts直後とかにreadonlyかexportするのが良いと思うよ。
readonly
export
VERBOSE='false' while getopts 'v' flag; do case "${flag}" in v) VERBOSE='true' ;; esac done readonly VERBOSE
スネークケース。
readonlyかdeclare -rを使う。 グローバル変数は広く使われるものなので、エラーハンドリングを実装することが重要。またreadonlyの意図で定義した変数はちゃんとそのことを明示すること。
declare -r
zip_version="$(dpkg --status zip | grep Version: | cut -d ' ' -f 2)" if [[ -z "${zip_version}" ]]; then error_message else readonly zip_version fi
関数固有の変数はlocalを使って宣言する。宣言と代入は別の行に書く。
local
my_func() { local my_var; my_var="$(my_func2)" || return }
すべての関数を定数のすぐ下にまとめて書く。呼び出し部分を関数実装箇所に混ぜない。
過去回
Features and Bugs
ファイル名のワイルドカード
ワイルドカードを使うときは明示的なパスを利用すること。
*
のかわりに./*
を使う等。eval
evalは使わない。
while
whileループよりforループかプロセス置換を使うべき。whileはsub processで実行されるので、ループ内での変更を親に伝達できないから。 (※プロセス置換はPOSIX互換ではないので注意)
プロセス置換のメリットは、whileと違って明示的にsubshellで実行されること。
命名規則
Function Names
スネークケース。ライブラリの場合は
::
で区切る。関数名の後には括弧をつける。function
をつけるかどうかはOptionalなのでプロジェクトで統一する。Variable Names
FunctionNameと同様。 ループで使う変数名はループ対象と関連性のある命名にする。
定数、環境変数
ファイルの先頭で定義し、大文字のアンスコつなぎにする。 getoptsなどで受け取った値も定数化したほうがよくて、そういうものは分岐の中で定数化するよりgetopts直後とかに
readonly
かexport
するのが良いと思うよ。ファイル名
スネークケース。
readonly 変数
readonly
かdeclare -r
を使う。 グローバル変数は広く使われるものなので、エラーハンドリングを実装することが重要。またreadonlyの意図で定義した変数はちゃんとそのことを明示すること。ローカル変数
関数固有の変数は
local
を使って宣言する。宣言と代入は別の行に書く。Function Location
すべての関数を定数のすぐ下にまとめて書く。呼び出し部分を関数実装箇所に混ぜない。
Calling Commands