./script
петляющие средства script
который находится в текущем каталоге. Обычно оболочка при запущении скрипта сначала звонит fork()
и exec()
т.е. сценарий будет работать в дочернем процессе (т.е. подоболочка)
. ./script
подобно source ./script
что означает запускать скрипт в текущей оболочке ни с кем fork()
Если сталкиваются с Bash $ (PWD)
, он выполнит команду PWD и заменить $ (PWD)
с выходом этой команды. $ PWD
- это переменная, которая почти всегда устанавливается. PWD - это команда встроенной оболочки с долгого времени.
Итак $ PWD
не удастся, если эта переменная не установлена и $ (PWD)
, если вы используете оболочку, которая не поддерживает $ ()
Конструкция, которая для моего опыта довольно часто бывает. Так что я бы использовал $ PWD
.
Как каждый ботаник у меня есть свои собственные учебное пособие в скриптах
Следует также упомянуть, что $PWD
желательно из-за его производительности. Как переменная оболочки, она может быть разрешена почти мгновенно. $(pwd)
немного сбивает с толку. Если вы проверите man 1 bulitin
в системе с Bash, вы увидите, что pwd
— это встроенная -команда, что может натолкнуть вас на мысль, что это будет так же быстро, как доступ к переменной. Однако конструкция $()
всегда запускает новую подоболочку (, новый процесс )для запуска его содержимого, независимо от того, что находится внутри. То же самое касается обратных кавычек. Действительно, когда я оцениваю его:
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)
Я получаю 1,52 секунды для вызова $(pwd)
и 0,018 секунды для $PWD
. По возможности следует избегать ненужного запуска подоболочек, а также любых других посторонних процессов. Они намного дороже, чем вызовы функций, к которым вы, возможно, привыкли в других языках.