如何使用存储在变量中的文件描述符?

如何使用存储在变量中的文件描述符?

例如,如果我分配

TWO=2

...以下失败(带有date: invalid date '2'):

date >> logfile $TWO>&1

当然,我总是可以做

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

这是运行包含流重定向(其中至少某些文件描述符显示为变量)的表达式的唯一方法吗?

答案1

你可以做

  • 5<&"$fd":在任何类似 Bourne 的 shell 中将 fd 复制到 fd 5(其中 5 是文字)(但请注意,当 yash 处于 posix 模式时,如果未打开以供读取,$fd则该功能将不起作用)。$fd
  • {fd}<&-:关闭$fdzsh、bash、ksh93 中的fd

但是您不能这样做,因为如果该内容恰好只包含十进制数字,"$fd">anything您不想不输出intoecho "$something">file的内容。$somethingfile

在 zsh、bash 和 ksh93 中,您可以使用{fd}> something9 以上的 fd 自动分配已存储进入$fd,但这不是你要问的。

据我所知,除了使用eval.

您可以eval仅使用以下命令将使用限制为重定向exec

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

在shell中也是同样的情况fish

在 和 导数中也是如此rc,其中语法为>[3=5],并且两个 fd 都必须是文字。

相关内容