J'ai rencontré BASEDIR=$(pwd)
dans un script.
Y a-t-il des avantages ou des inconvénients à utiliser BASEDIR="$PWD"
, à part peut-être que $PWD
pourrait être écrasé?
Si bash rencontre $(pwd)
il exécutera la commande pwd et remplacera $(pwd)
par la sortie de cette commande. $PWD
Est une variable qui est presque toujours définie. pwd est une commande Shell intégrée depuis longtemps.
Donc $PWD
Échouera si cette variable n'est pas définie et $(pwd)
échouera si vous utilisez un Shell qui ne supporte pas la construction $()
ce qui, à mon expérience, est assez souvent le cas. J'utiliserais donc $PWD
.
Comme chaque nerd, j'ai le mien Tutoriel de script Shell
Il convient également de mentionner que $PWD
Est souhaitable en raison de ses performances. En tant que variable Shell, elle peut être résolue presque instantanément. $(pwd)
est un peu plus déroutant. Si vous inspectez man 1 bulitin
Sur un système avec Bash, vous verrez que pwd
est une commande intégrée, ce qui peut vous faire croire qu'elle sera aussi rapide que d'accéder à une variable . Cependant, la construction $()
lance toujours un nouveau sous-shell (un nouveau processus) pour exécuter son contenu, quel que soit son contenu. La même chose vaut pour les backticks. En effet, quand je le compare:
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)
J'obtiens 1,52 seconde pour l'appel $(pwd)
et 0,018 seconde pour $PWD
. Le lancement inutile de sous-coques, ainsi que tout autre processus étranger, doit être évité autant que possible. Ils sont beaucoup plus chers que les appels de fonction auxquels vous pouvez être habitué dans d'autres langues.