Bashの関数名に?
を使う
bash の関数名には ?
が使えます。つまりまぁまぁ美しい関数名が作れます
if の中が美しくない例
# sf-pwgenが存在したら alias をいれる if type sf-pwgen > /dev/null 2>&1 ; then alias sf-pwgen-alphanum-12char="sf-pwgen -a alphanumeric -l 12 -c 1" alias sfpwgen="sf-pwgen -a alphanumeric -l 12 -c 1" fi
関数を使うべき
if の条件文の箇所は、ひと目見てわかりやすい関数名にするべきだと思う。
関数にする。
function cmd_is_exists { type "$1" > /dev/null 2>&1 return $? } if cmd_is_exists sf-pwgen ; then alias sf-pwgen-alphanum-12char="sf-pwgen -a alphanumeric -l 12 -c 1" alias sfpwgen="sf-pwgen -a alphanumeric -l 12 -c 1" fi
条件文だとひと目で分かる関数名にする。
?
を関数の名前に使えるので、これをもう少しわかりやすい関数名にすることが出来る。
function cmd_exists? { type "$1" > /dev/null 2>&1 }
よく使いそうなものも関数にしておくと便利
たとえば、数字かどうかのチェック
function is_int? { [[ $1 =~ ^-?[0-9]+$ ]] }
たとえば、bash の文字列の変数置換も書式を覚えづらいので関数にしておくとか
function upcase { echo ${@^^}; } function downcase { echo ${@,,}; } function Capitalize { echo ${@^}; }
たとえば、LinuxかOSXか判別し、同じbashrcを使いまわせるようにするなど。
function is_osx? { plat_name=$(uname -a ) plat_name=$(downcase $plat_name) [[ $plat_name == darwin* ]] } function is_linux? { plat_name=$(uname -a ) plat_name=$(downcase $plat_name) [[ $plat_name == linux* ]] } if is_osx? ; then source ~/.bashrc.osx elif is_linux?; then source ~/.bashrc.linux fi
このように、関数とその名前を上手に使える。記号だらけで読みにくいシェルスクリプトだって、工夫次第でかなり読みやすいコードになると思う。