Solarisのkshで確認。
とあるファイルを初期化するのに、たとえばこんな関数を作ったとする。
1: func() {
2: : > file
3: echo $?
4: }
ここで、fileへの書き込みに失敗した場合、非ゼロの値がエコーされることを期待する。
しかし実際には何も表示されない。
$ func
ksh: file: 作成できません。
$
どうやら、組み込みコマンドのリダイレクションに失敗すると、その時点で関数から抜け出てしまうようである。
1: func2() {
2: /bin/true > file
3: echo $?
4: }
5: func3() {
6: (:) > file
7: echo $?
8: }
外部コマンドを使うか、サブシェルにすることで期待した結果を得ることができる。
$ func2
ksh: file: 作成できません。
1
$ func3
ksh: file: 作成できません。
1
$
0 件のコメント:
コメントを投稿