如何使用变量在bash中指示文件描述符?

WH'*_*HeV 22 io bash file-descriptor exec

我想使用bash变量来指示文件描述符,如下所示:

id=6
file=a
exec $id<>$file
Run Code Online (Sandbox Code Playgroud)

但用法是错误的:

-bash: exec: 6: not found
Run Code Online (Sandbox Code Playgroud)

那么,如何使用变量来指示exec命令中的文件描述符?

Pau*_*ias 18

接受的答案是正确的,但是从bash 4.1开始,你可以使用自动文件描述符分配,在这种情况下你不需要eval:

file=a
exec {id}<>"$file"
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样使用它:

echo  test >&${id}
Run Code Online (Sandbox Code Playgroud)

要么:

fsck -v -f -C ${id} /dev/something
Run Code Online (Sandbox Code Playgroud)

  • `id` 是一个变量,你可以用 `echo $id` 看到它。 (2认同)
  • 尼斯.要在以后关闭这样的描述符,请使用`exec {id} <& - `. (2认同)
  • 也可以使用数组.`declare -a PIPE; exec {PIPE [0]} <>/dev/something`,例如`echo Hello World \!>&$ {PIPE [0]}`并用`exec {PIPE [0]}>& - 关闭 (2认同)

edu*_*ffy 14

您必须使用eval并将整个表达式放在引号中.

eval "exec $id<>$file"
Run Code Online (Sandbox Code Playgroud)

每次你想使用时都这样做$id.

  • 您不需要“eval”所有用法,只需调用“exec”即可打开描述符。[这个问题](/sf/ask/2912265121/)中有使用变量引用文件描述符的示例。 (2认同)