Também deve ser mencionado que $PWD
é desejável devido ao seu desempenho. Como uma variável shell, pode ser resolvida quase instantaneamente. $(pwd)
é um pouco mais confuso. Se você inspecionar man 1 bulitin
em um sistema com o Bash, verá que pwd
é um comando interno, o que pode levar você a acreditar que será tão rápido quanto acessar uma variável. No entanto, a construção $()
sempre lança um novo subshell (um novo processo) para executar seu conteúdo, independentemente do conteúdo interno. O mesmo vale para os backticks. De fato, quando eu benchmark isso:
echo 'Benchmarking $(pwd)...'
time (for i in {1..1000}; do echo $(pwd) > /dev/null; done)
echo 'Benchmarking $PWD...'
time (for i in {1..1000}; do echo $PWD > /dev/null; done)
Eu recebo 1,52 segundos para a chamada $(pwd)
e 0,018 segundos para $PWD
. O lançamento desnecessário de subshells, assim como qualquer outro processo estranho, deve ser evitado sempre que possível. Eles são muito mais caros do que as chamadas de função às quais você pode estar acostumado em outros idiomas.