Поскольку расширение переменной не было заключено в кавычки, пустое слово, возникающее в результате расширения $varsome
, полностью удаляется.
Давайте создадим функцию, которая выводит количество аргументов, которые она получает, и сравним случай -в кавычках и без кавычек:
$ args() { echo "got $# arguments"; }
$ var=""
$ args $var
got 0 arguments
$ args "$var"
got 1 arguments
То же самое происходит в вашем случае сid
:id -u $var
точно так же, как просто id -u
, когда var
пусто. Так как id
не видит имени пользователя, по умолчанию печатает информацию о текущем пользователе.
Если цитировать "$var"
, то результат будет другим:
$ var=""
$ id -u "$var"
id: ‘’: no such user
С этим исправлением вы можете использовать id
, чтобы узнать, существует ли пользователь. (Нам не нужны здесь выходные данные, так что перенаправьте их подальше.)
check_user() {
if id -u "$1" >/dev/null 2>&1; then
echo "user '$1' exists"
else
echo "user '$1' does not exist"
fi
}
check_user root
check_user asdfghjkl
Это напечатает user 'root' exists
и user 'asdfghjkl' does not exist
.
Это немного противоположно обычным проблемам, возникающим из-за неожиданного разбиения на слова переменных, не заключенных в кавычки. Но основная проблема та же самая и исправлена тем, что половина ответов здесь говорит :всегда цитирует расширения переменных (, если вы не знаете, что хотите поведение без кавычек ).
См.:
Вы можете использоватьperf
; например,
perf stat -e context-switches,cpl_cycles.ring0,cpl_cycles.ring123 your_command
выдаст сводку, аналогичную
Performance counter stats for 'your_command':
1 context-switches
11,890,096 cpl_cycles.ring0
9,980,265 cpl_cycles.ring123
0.011218937 seconds time elapsed
0.007533000 seconds user
0.003766000 seconds sys
, который показывает, что во время выполнения your_command
было одно переключение контекста (на другой процесс, а не на ядро ), и ЦП потратил 54% своего времени на выполнение кода ядра.
Обеспечение того, чтобы данный процесс привлекал как можно больше внимания процессора, может быть довольно сложным. Документация Виктора Стиннера по настройке эталонного теста содержит хороший обзор проблем и методов их устранения; его статья -сосредоточена на бенчмаркинге, но большая часть ее применима и в других обстоятельствах.