Лучше использовать $ (pwd) или $PWD?

./script петляющие средства script который находится в текущем каталоге. Обычно оболочка при запущении скрипта сначала звонит fork() и exec() т.е. сценарий будет работать в дочернем процессе (т.е. подоболочка)

. ./script подобно source ./script что означает запускать скрипт в текущей оболочке ни с кем fork()

39
12.12.2014, 13:03
2 ответа

Если сталкиваются с Bash $ (PWD) , он выполнит команду PWD и заменить $ (PWD) с выходом этой команды. $ PWD - это переменная, которая почти всегда устанавливается. PWD - это команда встроенной оболочки с долгого времени.

Итак $ PWD не удастся, если эта переменная не установлена ​​и $ (PWD) , если вы используете оболочку, которая не поддерживает $ () Конструкция, которая для моего опыта довольно часто бывает. Так что я бы использовал $ PWD .

Как каждый ботаник у меня есть свои собственные учебное пособие в скриптах

43
27.01.2020, 19:35

Следует также упомянуть, что $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. По возможности следует избегать ненужного запуска подоболочек, а также любых других посторонних процессов. Они намного дороже, чем вызовы функций, к которым вы, возможно, привыкли в других языках.

14
27.01.2020, 19:35

Теги

Похожие вопросы