A exclusão da substituição do comando $(...)
remove a falha para mim no 5.10. Isso sugere que o que você está vendo é o efeito de .
analisar todo o arquivo antes de ser executado e encontrar um erro nessa sintaxe não suportada. Por outro lado, o script está sendo analisado linha por linha, portanto, ele sai antes que o erro de sintaxe seja percebido.
Experimentalmente, você pode inserir outros erros de sintaxe e ver o mesmo comportamento: .
falha no início e sh
é executado na linha malformada.
Por quê? Eu não sei. Não parece ser especificamente documentado em qualquer lugar que eu possa encontrar. A página man apenas diz para .
:
. filename Read and execute commands from filename and return. The search path specified by PATH is used to find the direc- tory containing filename.
A documentação de <<word
diz que "entrada de shell é lida até ...", o que talvez implique uma análise minimalista, mas não vejo nada explícito em lugar algum. A análise de linha por linha é bastante comum para scripts de shell em geral, e é o que o Bash faz nos dois casos, por exemplo.
Why doesn't -x work when sourcing a file?
Ele funciona, desde que os comandos realmente iniciem a execução. Nada é impresso durante a fase de análise.
Para este exemplo específico, usar a substituição de comando ' ... '
-style funcionaria, mas o script real é provavelmente mais complexo.