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