変数に格納されたファイル記述子をどのように使用しますか?

変数に格納されたファイル記述子をどのように使用しますか?

たとえば、私が割り当てると

TWO=2

...次は失敗します(使用date: invalid date '2')。

date >> logfile $TWO>&1

もちろん私はいつでもできます。

eval "date >> logfile $TWO>&1"

これは、ファイル記述子の少なくとも一部が変数として表示されるストリームリダイレクトを含む式を実行する唯一の方法ですか?

ベストアンサー1

あなたはできます

  • 5<&"$fd":Bourneに似たシェルからfdをfd 5(ここでは5はリテラル)にコピーします(ただし、yashがposixモードのときに読み取り用$fdに開かれていない場合、この関数は機能しません)。$fd
  • {fd}<&-$fdzsh、bash、ksh93でfdを閉じます。

ただし、そのコンテンツに10進数のみが含まれている場合は、コンテンツを出力したくない場合は"$fd">anythingそれを行うことはできません。echo "$something">file$somethingfile

{fd}> somethingzsh、bash、ksh93では、9+でfd自動割り当てを使用できます。保存済みEnterと入力します$fd。しかし、それはあなたが要求するものではありません。

私が知る限り、eval

eval以下を使用して、リダイレクトにのみ使用を制限できますexec

(eval "exec $TWO>&1"; exec date) >> logfile

シェルでも同じ状況が発生しますfish

そしてDerivativesでも同様ですrc。ここで構文は次のように>[3=5]なり、両方のfdはリテラルでなければなりません。

おすすめ記事