シェル関数の使いかたは難しいのを。
以下はメモ。
シェル関数の実験
dorayaki@[~/study/shell_scrpt]$ lsl(){
> ls -l
> }
dorayaki@[~/study/shell_scrpt]$ lsl
合計 28

  • rwxr-xr-x 1 dorayaki dorayaki 154 2007-03-07 23:06 2-6-1.sh*
  • rwxr-xr-x 1 dorayaki dorayaki 118 2007-02-28 19:06 append.sh*
  • rwxr-xr-x 1 doシェル関数の実験

dorayaki@[~/study/shell_scrpt]$ lsl(){
> ls -l
> }
dorayaki@[~/study/shell_scrpt]$ lsl
合計 28

  • rwxr-xr-x 1 dorayaki dorayaki 154 2007-03-07 23:06 2-6-1.sh*
  • rwxr-xr-x 1 dorayaki dorayaki 118 2007-02-28 19:06 append.sh*
  • rwxr-xr-x 1 dorayaki dorayaki 62 2007-02-28 20:24 bk_q.sh*
  • rwxr-xr-x 1 dorayaki dorayaki 84 2007-03-01 23:39 mmm.sh*
  • rwxr-xr-x 1 dorayaki dorayaki 43 2007-03-01 23:26 nnn.sh*
  • rw-r--r-- 1 dorayaki dorayaki 5 2007-02-28 19:03 test1
  • rw-r--r-- 1 dorayaki dorayaki 10 2007-02-28 19:06 test2

dorayaki@[~/study/shell_scrpt]$

一列で書いた場合。
セミコロン;をコマンドの後に付け忘れないこと。

dorayaki@[~/study/shell_scrpt]$ lsl() { ls -l; }
dorayaki@[~/study/shell_scrpt]$ lsl
合計 28

  • rwxr-xr-x 1 dorayaki dorayaki 154 2007-03-07 23:06 2-6-1.sh*
  • rwxr-xr-x 1 dorayaki dorayaki 118 2007-02-28 19:06 append.sh*
  • rwxr-xr-x 1 dorayaki dorayaki 62 2007-02-28 20:24 bk_q.sh*
  • rwxr-xr-x 1 dorayaki dorayaki 84 2007-03-01 23:39 mmm.sh*
  • rwxr-xr-x 1 dorayaki dorayaki 43 2007-03-01 23:26 nnn.sh*
  • rw-r--r-- 1 dorayaki dorayaki 5 2007-02-28 19:03 test1
  • rw-r--r-- 1 dorayaki dorayaki 10 2007-02-28 19:06 test2

変数を使う際の注意

シェルスクリプトで使う変数も、シェル関数で使う変数もすべてそのシェルスクリプト内のテーブルに格納される。
つまり、c言語におけるローカル変数とグローバル変数のようなものである。その関数内でだけある変数を使いたいならば、
ローカル変数なのか、それともグローバル変数なのか一目でわかるように名前を付けるべきであろう。
名前をごっちゃにして使っていると、意図する値ではない値が変数に入ってしまい、意図しない動作をシェルスクリプト
してしまう危険性がある。

シェル関数とシェルの関係
シェル関数を使用する際、通常ならば、カレントシェルで実行されるが、リダイレクトしたときなどはカレントシェルが
サブシェルを作成し、そこで実行するらしい。
また、シェル関数がカレントシェルか、サブシェルで動作するのかによって、ちょっとした動作のちがいがある。
詳しい例が作れないし、想像できるレベルに私が達していないので、必要になったときここを参照。
入門シェルプログラミング〜P60〜

execコマンド実用例
http://x68000.q-e-d.net/~68user/unix/pickup?exec
rayaki dorayaki 62 2007-02-28 20:24 bk_q.sh*

  • rwxr-xr-x 1 dorayaki dorayaki 84 2007-03-01 23:39 mmm.sh*
  • rwxr-xr-x 1 dorayaki dorayaki 43 2007-03-01 23:26 nnn.sh*
  • rw-r--r-- 1 dorayaki dorayaki 5 2007-02-28 19:03 test1
  • rw-r--r-- 1 dorayaki dorayaki 10 2007-02-28 19:06 test2

dorayaki@[~/study/shell_scrpt]$

一列で書いた場合。
セミコロン;をコマンドの後に付け忘れないこと。

dorayaki@[~/study/shell_scrpt]$ lsl() { ls -l; }
dorayaki@[~/study/shell_scrpt]$ lsl
合計 28

  • rwxr-xr-x 1 dorayaki dorayaki 154 2007-03-07 23:06 2-6-1.sh*
  • rwxr-xr-x 1 dorayaki dorayaki 118 2007-02-28 19:06 append.sh*
  • rwxr-xr-x 1 dorayaki dorayaki 62 2007-02-28 20:24 bk_q.sh*
  • rwxr-xr-x 1 dorayaki dorayaki 84 2007-03-01 23:39 mmm.sh*
  • rwxr-xr-x 1 dorayaki dorayaki 43 2007-03-01 23:26 nnn.sh*
  • rw-r--r-- 1 dorayaki dorayaki 5 2007-02-28 19:03 test1
  • rw-r--r-- 1 dorayaki dorayaki 10 2007-02-28 19:06 test2

変数を使う際の注意

シェルスクリプトで使う変数も、シェル関数で使う変数もすべてそのシェルスクリプト内のテーブルに格納される。
つまり、c言語におけるローカル変数とグローバル変数のようなものである。その関数内でだけある変数を使いたいならば、
ローカル変数なのか、それともグローバル変数なのか一目でわかるように名前を付けるべきであろう。
名前をごっちゃにして使っていると、意図する値ではない値が変数に入ってしまい、意図しない動作をシェルスクリプト
してしまう危険性がある。

シェル関数とシェルの関係
シェル関数を使用する際、通常ならば、カレントシェルで実行されるが、リダイレクトしたときなどはカレントシェルが
サブシェルを作成し、そこで実行するらしい。
また、シェル関数がカレントシェルか、サブシェルで動作するのかによって、ちょっとした動作のちがいがある。
詳しい例が作れないし、想像できるレベルに私が達していないので、必要になったときここを参照。
入門シェルプログラミング〜P60〜

execコマンド実用例
UNIXの部屋〜execコマンド〜