Na expressão
r='vx $* < \'tty\' > \'tty\''
O Bash interpreta vx
como um nome de arquivo executável para o qual você passa todos ( $*
) dos argumentos passados para o script atual após a expansão do shell. Por exemplo, se os argumentos para o script forem * 'ls /dev'
, a lista de argumentos passada para vx será o nome de todos os arquivos no diretório atual, além dos nomes de todos os arquivos em /dev
. O número de argumentos será o mesmo que o número de nomes de arquivos.
vx
é assumido para aceitar entrada em sua entrada padrão.
tty
é um executável que retorna uma string que o Bash interpreta como um nome de arquivo.
Observe que a primeira chamada de tty
poderia retornar um nome de arquivo diferente da segunda invocação ', por exemplo, se tty
produzir o nome do arquivo com base em alguma condição externa, como o conteúdo do arquivo com o nome produzido pelo invocação anterior ou com base em um registro de data e hora ou outra condição externa que pode mudar.
A expressão r='...'
atribui a saída padrão do comando backticked a r
. O valor de retorno da expressão retrocedida está em $?
.
Como a saída padrão de vx
é redirecionada para o nome do arquivo produzido pela segunda chamada de tty
, o valor de r
sempre estará vazio ( r=
), que é o mesmo que r=0
em a expressão [[ r -ne 0 ]]
. O resultado é que não há situação em que o loop possa ser executado mais de uma vez.