【bash】シェルスクリプト内で別の関数に2つ以上の引数を与える

スポンサーリンク

コンテンツ

なかなかうまくいかなかったのでメモ。シェルはbash。

こんな状態

a.sh

a=1
b=2
source common.sh
myhogehoge $a $b

common.sh

myhogehoge () {
local aa=$1
local bb=$2
myhogehoge $aa $bb
}

ちょっと複雑ですが
a.shを実行
→a.sh内でcommon.shを呼び、その中の関数myhogehogeを実行。
→myhogehogeにはa.sh内で2つの引数をわたし、外部common.sh内で2つの引数を受け取り、それを実行する
という流れ。

NGな書き方

上の通りにすると$2が空になります

正しい書き方

a.shの

myhogehoge $a $b

myhogehoge "$a" "$b"

とするとOKみたいです。

調べると、どうも変数展開と単語分割などがからんでいるみたいです。
シェル変数を引数にしたときの空白の扱いについて - Linux Square - @IT
bashにそんなに詳しくないのでよくわからないですが、たぶん””でかこまないと$aと$bを連結して評価(変数展開)→空白(半角スペース)があるので$bが落ちる→$aのみが1番目の引数として渡る んではないでしょうか、たぶん(^^;)
シェルスクリプト内で別の関数を読んでいるので、けっこうややこしめ。

まあ、空白がある文字列をシェルで扱う場合は気をつけたほうがいいような気がしました。シェル関数で複数の引数は初めて使ったので、メモメモφ(..)