Если есть известный вам символ, который не может появиться в успешном совпадении, вы можете проверить конкатенацию $A
и $B
по соответствующему повторяющемуся регулярному выражению.
regex='([0-9]+(\.([0-9]+(\.([0-9]+))?))?)'
[[ "$A-$B" =~ ^$regex-$regex$ ]] && echo "A: $A B: $B"
Возможно, вам придется немного изменить регулярное выражение, чтобы компенсировать отсутствие в нем самих ^
и $
.
В стандартном синтаксисе оболочки:
cd /var/run/screen/S-erpnext
for screen in *
do
case $screen in
(5061.erpnext) : do nothing ;;
(*) kill "${screen%%.*}" ;;
esac
done
Вышеупомянутые изменения в каталоге экрана для этого пользователя затем перебирают каждый файл сеанса в этом каталоге. Если сеанс , а не 5061.erpnext, то он уничтожает соответствующий PID (за номер до первой точки ). Расширение ${screen%%.*}
удаляет как можно больше символов с конца строки, пока не найдет точку. Это приводит к удалению материала, который не является PID. : do nothing
использует встроенный -:
, который ничего не делает, включая игнорирование каких-либо параметров, поэтому я сделал строку самокомментарием -, чтобы указать, что мы не уничтожаем любые PID для этого случая.