Я не собираюсь вдаваться в большое количество подробностей о том, почему Ваши попытки ведут себя способ, которым они делают, потому что ответ Michael Mrozek касается этого хорошо. Короче говоря все между одинарными кавычками ('…'
) интерпретируется буквально (и в особенности первое '
отмечает конец литеральной строки), тогда как `
и $
сохраните их особое значение между "…"
.
В одинарных кавычках нет никакого заключения в кавычки, таким образом, Вы не можете поместить одинарную кавычку в единственно заключенной в кавычки строке. Существует однако идиома, которая похожа на него:
echo 'foo'\''bar'
Это печатает foo'bar
, потому что аргумент echo
сделан из единственно заключенной в кавычки трех символьных строк foo
, связанный с отдельным символом '
(полученный путем защиты символа '
от его особого значения до предыдущего \
), связанный с единственно заключенной в кавычки тремя символьными строками bar
. Таким образом, хотя это не совсем, что происходит негласно, можно думать '\''
как способ включать одинарную кавычку в единственно заключенной в кавычки строке.
Если Вы хотите распечатать сложные многострочные строки, лучший инструмент здесь документ. Здесь документ состоит из этих двух символов <<
сопровождаемый маркером такой как <
'EOF'
или "EOF"
или \EOF
или 'E ""' или …), затем текст интерпретируется буквально (как внутренние одинарные кавычки, за исключением того, что даже '
обычный символ). Если маркер не заключается в кавычки вообще, то текст интерпретируется как в дважды заключенной в кавычки строке, с $\`
сохранение их особого статуса (но "
и новые строки интерпретируются буквально).
cat <<'EOF'
echo PARAM=` grep $ARG /var/tmp/setfile | awk '{print $2}' `
EOF
Вы могли суммировать столбцы использования с awk
:
ps --no-headers -u $USER -o pcpu,rss | awk '{cpu += $1; rss += $2} END {print cpu, rss}'
Вы могли бы также интересоваться free
команда для использования памяти:
$ free
total used free shared buffers cached
Mem: 2055480 1806596 248884 0 14016 346276
-/+ buffers/cache: 1446304 609176
Swap: 2097148 132980 1964168
Вывод находится в килобайтах (использование free --mega
для мегабайтов или free -m
для мебибайт). В частности, used
, +/- buffers/cache
запись - что-то как общая используемая физическая память (всеми).
Вы можете попробовать:
$ ps -eo vsz,comm= | awk 'NR>1{u[$2]+=$1}END{for(i in u) print u[i]"="i}'