Por exemplo, se eu atribuir
TWO=2
...o seguinte falha (com date: invalid date '2'
):
date >> logfile $TWO>&1
Claro, eu sempre posso fazer
eval "date >> logfile $TWO>&1"
Essa é a única maneira de executar expressões que incluem redirecionamentos de fluxo em que pelo menos alguns dos descritores de arquivo aparecem como variáveis?
Você pode fazer
5<&"$fd"
: duplique fd$fd
em fd 5 (onde 5 é literal) em qualquer shell do tipo Bourne (embora tenha cuidado quando o yash estiver no modo posix, isso não funcionará se$fd
não estiver aberto para leitura).{fd}<&-
: fechar fd$fd
em zsh, bash, ksh93Mas você não pode fazer
"$fd">anything
o que não desejaecho "$something">file
não enviar o conteúdo de$something
intofile
se esse conteúdo conter apenas dígitos decimais.Em zsh, bash e ksh93, você pode usar
{fd}> something
um fd acima de 9 para ser alocado automaticamente e armazenado em$fd
, mas não é isso que você está perguntando.Até onde eu sei, não há outra maneira a não ser usar
eval
.Você pode limitar
eval
o uso ao redirecionamento apenas usandoexec
:É a mesma situação no
fish
shell.Também é verdade em
rc
e derivadas, onde a sintaxe é>[3=5]
, e ambos os fds precisam ser literais.