ものすごく基本的な話ですが…

はじめに

こんにちは、イメージ・マジックのもあいです。
bashで簡単なツールを作っているときに、つまらない内容ではまってしまったので、備忘録としておいておきます。

bashで関数

あまり、bashで関数は作らないのですが、スクリプトの長さがそこそこあるのとパラメータによる分岐があったので関数かしてソースコードを整理していた時に、スクリプトが正常に動作しなくなってしまいました。そのソースコードの主な抜粋は下記のようになります。
#!/bin/bash
FIRST=${1}

function add ()
{
  echo add function
}

function remove ()
{
  echo remove function;
}

if [ "${FIRST}" = "add" ]; then
  add
elif [ "${FIRST}" = "remove" ]; then
  remove
else
  echo ${0} add|remove 以下使い方
fi
そしてこのスクリプトを実行したときの結果は下記の通り
remove function
想定としては「add|remove 以下使い方」が表示されることでしたが、remove関数実行されてしまいました。

結論

結論はechoに|removeと書いてしまっているからでした。あまりBashで深くスクリプトを作成していないので、この行に行き着くのにものすごく時間がかかりました。このechoの後ろの文字を”で囲めば想定した動作になりました。 使い方として記載したechoで関数が呼び出されることになるのは考えていなかったのでびっくりしました。