É melhor usar $ (pwd) ou $ PWD?

22

Encontrei BASEDIR=$(pwd) em um script.

Existe alguma vantagem ou desvantagem em usar BASEDIR="$PWD" , além de talvez, que $PWD poderia ser substituído?

    
por Minix 12.12.2014 / 12:03

2 respostas

23

Se o bash encontrar $(pwd) , executará o comando pwd e substituirá $(pwd) pela saída desse comando. $PWD é uma variável quase sempre definida. O pwd é um comando shell interno desde há muito tempo.

Portanto, $PWD falhará se essa variável não estiver configurada e $(pwd) falhará se você estiver usando um shell que não suporta a construção $() , o que, na minha opinião, é quase sempre o caso. Então eu usaria $PWD .

Como todo nerd eu tenho meu próprio tutorial sobre scripts de shell

    
por 12.12.2014 / 12:40
1

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.

    
por 03.07.2018 / 19:08