Различие между максимальным размером резидентного набора, как сообщается/usr/bin/time по сравнению с getrusage?

Во-первых, отметим, что единственная косой спички слишком много:

$ echo $'eegg \n e.g.' | grep e\.g\.
eegg
 e.g.

относится к Bash , бесперебойный период такой же, как и срок. Bash проходит в период GREP . Для Greep, период совпадает с чем угодно.

Теперь рассмотрим:

$ echo $'eegg \n e.g.' | grep e\\.g\\.
 e.g.
$ echo $'eegg \n e.g.' | grep e\\\.g\\\.
 e.g.
$ echo $'eegg \n e.g.' | grep e\\\\.g\\\\.
$

, когда Bash видит двойную косулью, уменьшает его на одну косулью и проходит, чтобы на Греп, который, в первом из трех тестов выше, видит, как мы хотим, одну косулью до периода. Таким образом, это делает правильную вещь.

С тройной косулью, Bash уменьшает первые два на одну косулью. Затем он видит \. . Поскольку сбежавший период не имеет особого значения для Bash, это сводится к простому периоду. Результатом заключается в том, что Greep видит, как мы хотим, слешь до периода.

с четырьмя ударами, Bash уменьшает каждую пару на одну косулью. Bash проходит на Greep два косания и период. Греп видит две кособыки и период и уменьшает две косынки в один литерал Slash. Если вход не имеет буквальной слез, а затем любой символ, нет совпадений.

Чтобы проиллюстрировать, что последний, помните, что внутри одной цитаты все символы являются буквальными. Таким образом, учитывая следующие три входных строка, команда GREP совпадает только на линии с буквальной косулью на входе:

$ echo 'eegg
e.g.
e\.g\.' |  grep e\\\\.g\\\\.
e\.g\.

Краткое изложение поведения Bash

для Bash, правила

  • Две скольжения сводится к Одиночная слеш.

  • Слешь перед нормальным характером, как период, является просто нормальным характером (периодом).

Таким образом:

$ echo \. \\. \\\. \\\\.
. \. \. \\.

Существует простой способ избежать всей этой путаницы: на командной строке Bash регулярные выражения должны быть помещены в однозначные цитаты. Внутри одиночных цитат, Bash оставляет все одни.

$ echo '\. \\. \\\. \\\\.'  # Note single-quotes
\. \\. \\\. \\\\.

1
24.04.2014, 04:43
1 ответ

Согласно getrusage() man page:

long   ru_maxrss;        /* maximum resident set size */

В то время как man page для /usr/bin/time устанавливает макрос %M следующим образом:

%M     Maximum resident set size of the process during its lifetime, in Kbytes.
-1
28.01.2020, 02:12

Теги

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