プログラム P を呼び出すシェルスクリプト S を書いています。
P は stdin からの入力のみを受け入れます。
私のスクリプト S のパラメーターの 1 つはオプションです。パラメータが存在する場合、それは P に供給されるべきファイルを示します。パラメータが欠落している場合、S の標準入力が P に供給されるべきです。
これはそれを解決するための私の試みでした:
P <${3:-&0}
アイデアは次のとおりです。(3番目の)パラメーターがファイル名の場合、たとえばfoo、実行する必要があります
P <foo
ただし、見つからないか空の場合は実行する必要があります
P <&0
私の理解では、これは単に
P
つまり、標準入力から読み取ります。ただし、これは機能しません。<&0 を文字通り使用している間、次のように機能します
echo abc|cat <&0
スクリプトで実行している方法で使用すると、エラー メッセージno such file or directory: &0が生成されます。これは私を驚かせます.zshのmanページから、リダイレクトを設定する前にパラメーターの展開が発生することを理解しています。
もちろん、私はトリックを使うことができました
cat $3|P
しかし、これはあまりエレガントに見えません。
なぜ私のアプローチがうまくいかなかったのか、ここで使用するのに適したイディオムは何ですか?