É fácil entender por que ele falha quando você pensa em:
echo $text>some-file
Você não gostaria que se comportasse de maneira diferente se $text
contivesse um número.
Você precisaria usar eval
aqui:
eval 'exec '"$fd"'> "$file"'
(você deseja que $fd
seja expandido nos argumentos para eval
, mas não $file
).
Note que ksh93, zsh e bash introduziram (em abril de 2005, zsh 4.3.0, bash 4.1-alpha, ksh93r) a possibilidade de ter fds dinâmicos, como:
exec {fd}> "$file"
Aqui, o descritor de arquivo (um livre acima de 10) é escolhido pelo shell e armazenado na variável $fd
.
Que você pode usar com ... >&$fd
.
Ele combina mais de perto com o que você faz em outros idiomas: fd = open(...)
, write(fd, ...)
.