function

リダイレクト

きちんと全てのコマンドを同じファイルディスクリプタにつないでるんだな。丁寧だ。
おそらくexecする前につないでるだけなんだろうがねらい通りの動きをするってすごいな。

$ echo "aaa";echo "bbb"> a.txt
aaa
$ function a { echo "aaa";echo "bbb"; }
$ a>b.txt
$ cat a.txt
bbb
$ cat b.txt
aaa
bbb

再帰を止める

unsetで良いみたい。(追記:6/29 そうすると自身の定義も失う。)
中身を見たいときにはdeclare -f 関数名

$ function ls { unset ls;echo "aaa";ls; }
$ declare -f ls
ls ()
{
    unset ls;
    echo "aaa";
    ls --color=auto
}
$

再帰で遊ぶ

だってやってみたかったんだもん。階乗
但し、終了コードの制約上途中からおかしい(笑

$ function c { if [ $1 -eq 1 ]; then return 1;else c $(($1-1));a=$(($?*$1));echo $a;return $a; fi; }
$ c 5
2
6
24
120
$ c 11
2
6
24
120
720
1456
1408
1152
1280
0

入力と出力を一致させる

Quineって遊びらしい。

作り方(おそらくdeclareが妙なコードを出している為この方法で作らないとdiffが出る)

a () { declare -f a; echo a; } ; a > a.txt

中身

a ()
{
    declare -f a;
    echo a
}
a