Bash
如何使用儲存在變數中的文件描述符?
例如,如果我分配
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}<&-
: 關閉$fd
zsh、bash、ksh93 中的fd但是您不能這樣做
"$fd">anything
,因為您不想echo "$something">file
不輸出$something
into的內容,file
如果該內容恰好只包含十進制數字。在 zsh、bash 和 ksh93 中,您可以使用
{fd}> something
9 以上的 fd 自動分配並儲存到$fd
中,但這不是您要的。據我所知,除了使用
eval
.您只能
eval
使用以下方法將使用限制為重定向exec
:(eval "exec $TWO>&1"; exec date) >> logfile
在
fish
shell 中也是同樣的情況。在
rc
和派生類中也是如此,其中語法為>[3=5]
,並且兩個 fd 都必須是字面量。