setoya-blog

システム開発技術、データ分析関連でお勉強したことや、山奥生活を綴る、テンション低めなブログです。

久々に入門bashを読み進める

入門bash 第3版

入門bash 第3版


気になったことはブログに残しておくことで、後から自然と見返す回数も増えると思うので書いていこうと思う。

今日は4章の「基本的なシェルプログラミング」を読み進めた。
bash(というかBorne Shell)のシェル変数には特殊な組み込み変数である位置パラメータというものがある。
位置パラメータが何をしてくれるかというと、シェルスクリプトに渡された引数を参照できるようにしてくれる。
具体的には、1つ目、2つ目、3つ目の引数が$1, $2, $3というシェル変数で参照可能になる。

位置パラメータはシェルスクリプト呼び出し時の引数を参照可能にするだけでなく、関数呼び出し時の引数も参照可能にしてくれる。
このときの関数内での位置パラメータはローカル変数として扱われる。
一方で、関数の中で定義されるその他の変数はグローバル変数となる。

ここら辺の情報をまとめて検証するシェルスクリプトは、以下のようになる。

#!/bin/bash
function afunc 
{
  echo in function: $0 $1 $2
  var1="in function"
  echo var1: $var1
}

var1="outside function"
echo var1: $var1
echo $0: $1 $2
afunc funcarg1 funcarg2
echo var1: $var1
echo $0: $1 $2

Solaris 10上での実行結果は以下のような感じ。

bash-3.00$ ./sample.sh arg1 arg2
var1: outside function
./sample.sh: arg1 arg2
in function: ./sample.sh funcarg1 funcarg2
var1: in function
var1: in function
./sample.sh: arg1 arg2
bash-3.00$

関数内で変更されたvar1が関数外でも影響を受けているのが確認できる。