Sim, a expansão do nome do arquivo após a substituição do comando e outras expansões geralmente não são desejadas¹ e não são feitas por padrão no zsh, exceto na emulação sh / ksh ( globsubst
option).
Enquanto você poderia usar ${~$(...)}
para solicitar o uso de globsusbt para aquela substituição de comando específica (e, a propósito, você não precisa da parte paste
, espaço e nova linha estão no valor padrão de $IFS
), uma maneira muito melhor de fazer isso com o zsh seria:
ids=($(qstat))
tail -F logs/*${^ids}
Observe que, se algum desses globs não corresponder a nenhum arquivo, o comando será cancelado.
tail -F logs/*${^ids}(N)
(onde (N)
ativa nullglob para essas globs) evitaria isso, mas executaria tail -F
sem argumento se não houvesse nenhum arquivo (consulte Por que o nullglob não é padrão? ).
Você também pode fazer isso:
logs=(logs/*${^$(qstat)}(N))
(($#logs)) && tail -F $logs
¹ O fato de que bash
e outras shells parecidas com Bourne fazem isso pode ser visto como um bug. Essa é uma das razões por que você precisa citar todas as suas variáveis , ou por que você precisa de set -o noglob
antes de usar um $(...)
sem aspas quando desejar apenas a divisão essa divisão + glob. Todos os shells mais modernos que não carregam a bagagem do shell Bourne como rc
, es
ou fish
também não fazem isso.