Bash

如何使用儲存在變數中的文件描述符?

  • August 28, 2019

例如,如果我分配

TWO=2

…以下失敗(帶有date: invalid date '2'):

date >> logfile $TWO>&1

當然,我總能做到

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

這是執行包含流重定向的表達式的唯一方法,其中至少一些文件描述符顯示為變數?

你可以做

  • 5<&"$fd":在任何類似 Bourne 的 shell 中將 fd 複製到 fd 5(其中 5 是文字)上(但請注意,當 yash 處於 posix 模式時,如果未打開以供閱讀$fd,則該操作將不起作用)。$fd
  • {fd}<&-: 關閉$fdzsh、bash、ksh93 中的fd

但是您不能這樣做"$fd">anything,因為您不想echo "$something">file不輸出$somethinginto的內容,file如果該內容恰好只包含十進制數字。

在 zsh、bash 和 ksh93 中,您可以使用{fd}> something9 以上的 fd 自動分配並儲存$fd中,但這不是您要的。

據我所知,除了使用eval.

您只能eval使用以下方法將使用限制為重定向exec

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

fishshell 中也是同樣的情況。

rc和派生類中也是如此,其中語法為>[3=5],並且兩個 fd 都必須是字面量。

引用自:https://unix.stackexchange.com/questions/529719