Я использую tcl для сопоставления с образцом.Ниже приведена строка, для которой я выполняю сопоставление:
ps -ef | grep ipqosmgr
root 17255 17136 0 22:34 ttyS0 00:00:00 grep ipqosmgr
root 28986 17731 0 Jun05 ? 00:02:01 /isan/bin/ipqosmgr
Как правило, я хотел бы, чтобы 3-я строка
root 28986 17731 0 Jun05 ? 00:02:01 /isan/bin/ipqosmgr
, так как я хотел бы, чтобы идентификатор процесса ассоциировался с процессом.
Когда я использую следующее регулярное выражение, оно работает как положено:
% foreach line [split $output \n] {
if { [ regexp -nocase {root\s+([0-9]+)\s+.*(/isan/bin/ipqosmgr)} $line - value ] } {
puts $line
}
}
root 28986 17731 0 Jun05 ? 00:02:01 /isan/bin/ipqosmgr
% puts $value
28986
%
Однако я хотел бы, чтобы этот код запускался для нескольких процессов и, следовательно, поместил его в функцию с $ process , который будет содержать значение процесса.Когда я использую то же регулярное выражение с переменной $ process , он завершается ошибкой.
% puts $process
ipqosmgr
%
% foreach line [split $output \n] {
if { [ regexp -nocase {root\s+([0-9]+)\s+.*(/isan/bin/$process)} $line - value ] } {
puts $line
}
}
%
% puts $value
can't read "value": no such variable
%
Я понятия не имею, почему он так себя ведет, и было бы здорово, если бы кто-то могскажи мне, что здесь не так и как это исправить.