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

Я обнаружил в скрипте BASEDIR = $ (pwd) .

Есть ли преимущества или недостатки по сравнению с использованием BASEDIR = "$ PWD" , кроме того, что $ PWD может быть перезаписан?


Если bash обнаруживает $ (pwd) он выполнит команду pwd и заменит $ (pwd) выводом этой команды. $ PWD — это переменная, которая почти всегда устанавливается. pwd давно является встроенной командой оболочки.

Итак, $ PWD завершится ошибкой, если эта переменная не установлена, и $ (pwd) завершится ошибкой, если вы используете оболочка, которая не поддерживает конструкцию $ () , что, по моему опыту, довольно часто имеет место. Поэтому я бы использовал $ PWD .

Как и у каждого ботаника, у меня есть собственное руководство по написанию сценариев оболочки


10

Также следует упомянуть, что $ 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 (для i in {1..1000}; do echo $ PWD>/dev/null; done)  

У меня 1,52 секунды для вызова $ (pwd) и 0,018 секунды для $ PWD . По возможности следует избегать ненужного запуска подоболочек, а также любых других посторонних процессов. Они намного дороже, чем вызовы функций, к которым вы, возможно, привыкли на других языках.

Улучшите этот ответ
ответил 03 июля ’18 в 17:08
  • Это интересный подход, но я не знать, беспокоит ли меня производительность моих сценариев оболочки. Мне также интересно, как изменится производительность, если pwd изменится между запросами. — Minix 9 сен., 19:30
  • 1
    @Minix Я изменил свой скрипт, чтобы тело цикла было echo $ PWD; pushd.. ; echo $ PWD; popd (с дополнительным >/dev/null после каждого оператора), и это занимает 0,05 секунды. Затем я удалил эхо-операторы (только pushd/popd), и это заняло 0,03. Таким образом, время на echo $ PWD все еще составляло 0,01 секунды или около того. Я сделал нечто подобное с $ (pwd) , и на каждый цикл уходило 2,2 секунды, то есть 1,1 секунды на вызов $ (pwd) . — markasoftware 10 сен. ’18 в 1:26
  • Не буду слишком разборчивым, но я могу представить, что вычисление, которое заменит $ PWD , будет выполняться в фоновом режиме до оценки операторов эха. Но очевидно, что доступ к $ PWD по-прежнему значительно быстрее, поэтому, если совместимость не вызывает беспокойства, это определенно причина выбрать одно из них. Спасибо за работу по тщательному тестированию. 🙂 — Minix 10 сен ’18 в 10:37
добавить комментарий |

Следует также упомянуть, что $ 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 (для i in {1..1000}; do echo $ PWD>/dev/null; done)  

У меня 1,52 секунды для вызова $ (pwd) и 0,018 секунды для $ PWD . По возможности следует избегать ненужного запуска подоболочек, а также любых других посторонних процессов. Они намного дороже, чем вызовы функций, к которым вы, возможно, привыкли на других языках.



Команда pwd в Linux с примерами — GeeksforGeeks

Команда pwd в Linux с примерами
shitalpatil94612
@ shitalpatil94612

->

pwd означает P rint W orking D irectory. Он печатает путь к рабочему каталогу, начиная с корня.
pwd — это встроенная команда оболочки (pwd) или фактический двоичный файл (/bin/pwd).
$ PWD — это среда переменная, в которой хранится путь к текущему каталогу.
У этой команды есть два флага.

pwd -L : печатает символический путь.
pwd -P : печатает фактический путь.

A) Встроенный pwd (pwd):

В данном примере каталог/home/shital/logs/является символической ссылкой на целевой каталог/var/logs/

B) Двоичный pwd ( /bin/pwd):

Стандартное поведение встроенного pwd такой же, как pwd -L.
И поведение по умолчанию/bin/pwd такое же, как pwd -P.


Значение переменной $ PWD такое же, как и pwd -L.

Мои личные заметки arrow_drop_up
Оцените статью
logicle.ru
Добавить комментарий