O que significa a expressão $ (“dir / file”) no bash?

5

Em um script bash que não posso postar aqui, vejo a seguinte expressão:

$(<"dir/file")

Pelo que entendi, a expressão $(...) avalia um comando dentro (como ao usar backticks), mas qual é o papel do colchete angular usado dentro do colchete?

    
por Alex 28.11.2013 / 10:21

1 resposta

9

Um redirecionamento <"dir/file" abre o arquivo para leitura na entrada padrão pela duração do comando ao qual o redirecionamento se aplica. Quando não há comando, o arquivo é aberto para leitura (o que leva a um erro se o arquivo não existir ou não tiver a devida permissão), mas diferente do redirecionamento não tem efeito.

O Ksh adicionou uma extensão, que foi adotada por bash e ksh. Se uma substituição de comando contiver um redirecionamento de entrada e nada mais $(<"dir/file") (nenhum comando, nenhum outro redirecionamento, nenhuma atribuição, etc.), o comando susbtitution será substituído pelo conteúdo do arquivo. Assim, $(<"dir/file") é equivalente a $(cat "dir/file") (exceto que não chama o utilitário cat , portanto é marginalmente mais rápido e faz a mesma coisa mesmo se cat tiver sido substituído ou não estiver no caminho de pesquisa do comando ).

Isso é mencionado no manual bash sob “substituição de comando” .

    
por 29.11.2013 / 00:57