たとえば、私が割り当てると
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}<&-
:$fd
zsh、bash、ksh93でfdを閉じます。
ただし、そのコンテンツに10進数のみが含まれている場合は、コンテンツを出力したくない場合は"$fd">anything
それを行うことはできません。echo "$something">file
$something
file
{fd}> something
zsh、bash、ksh93では、9+でfd自動割り当てを使用できます。保存済みEnterと入力します$fd
。しかし、それはあなたが要求するものではありません。
私が知る限り、eval
。
eval
以下を使用して、リダイレクトにのみ使用を制限できますexec
。
(eval "exec $TWO>&1"; exec date) >> logfile
シェルでも同じ状況が発生しますfish
。
そしてDerivativesでも同様ですrc
。ここで構文は次のように>[3=5]
なり、両方のfdはリテラルでなければなりません。