Este comando funciona conforme o esperado:
$(echo 10 > file.txt)cat file.txt; $(echo 5 > file.txt)cat file.txt
Saída:
10
5
Este, no entanto, não:
bash -c "$(echo 10 > file.txt)cat file.txt; $(echo 5 > file.txt)cat file.txt"
Saída:
5
5
Ainda mais estranho é esse comportamento:
bash -c "$(echo 10 > file.txt)cat file.txt; rm -f file.txt; $(echo 5 > file.txt)cat file.txt"
Saída:
5
cat: file.txt: No such file or directory
Mesmo adicionando sono:
bash -c "$(echo 10 > file.txt)cat file.txt; sleep 1; rm -f file.txt; sleep 1; $(echo 5 > file.txt)cat file.txt"
você obtém um comportamento de ficção científica, a mesma saída de antes:
5
# 2 seconds wait...
cat: file.txt: No such file or directory
Quase parece que a ordem dos comandos é da direita para a esquerda.
Como tal estranheza é concebível?
EDITAR:
@steeldriver com x
Entrada:
bash -c "$(echo 10 > file.txt)cat file.txt; $(echo 5 > file.txt)cat file.txt"
Saída:
++ echo 10
++ echo 5
+ bash -c 'cat file.txt; cat file.txt'
5
5