こんにちは。筑波大学の新城です。

In article <cg7mlf$kgl$1@newsl.dti.ne.jp>
        "Anonymous Buddha" <gobtma@yahoo.co.jp> writes:
> csh でスクリプトを書いたのですが、引数指定でも標準入力でも同様の動作をさせ
> たい為に、再起呼び出しを利用してみました。スクリプトが test.sh として、以下
> のような感じです。

普通は、その表現だと cat みたいに、
    ・複数引数があれば複数のファイル
    ・引数がなければ標準入力
という意味になります。それなら、

    cat $* | ...

として、cat でまとめます。でもちょっと違うかも。

> 引数の場合と標準出力の場合に似たような動作をするものは、コマンド類
> でも色々ありますが(wc,ls等)、どのように実装されているのでしょうか?

wc は、cat と同じで引数をファイル名と見なして動作します。
ls は、引数がなければ、"." が与えられたと見なして動作します。

> #!/bin/csh/
> if ($#argv > 0) then
>     while ($#argv > 0)
>         set BUFF = $argv[1]
>         echo $BUFF | test.sh

そういう話なら、次のどれかにするのがよいでしょう。

(1) シェル・スクリプトとしては引数専用にする。標準入力から与
えたくなった時には、xargs か `cat` を使う。

(2) シェル・スクリプトとしては、標準入力専用にする。引数で与
えられてしまったものは、echo arg1 arg2 .. | で呼び出す。

でもなあ、この間こんな Ruby スクリプト書いたばかりでした。

if( ARGV.length == 0 )
    $stdin.each_line {|i|
        i.chomp!
        f( i )
    }
else
    ARGV.each { |i|
        f( i )
    }
end

\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報       \\