Существует простое решение — использовать%%
(${var%% *}
)вместо%
(${var% *}
). Это удалит все(*
)после начального пробела.
$ var='2492 some string continues here'
$ echo "${var%% *}"
2492
Но это не удастся, если строка в var содержит начальные пробелы. Можно удалить начальные пробелы с помощью:
$ var=$' \t 2492 some string continues here '
$ var="${var#"${var%%[![:space:]]*}"}"
$ echo "$var"
2492 some string continues here
$ echo "${var%%[[:space:]]*}"
2492
Это работает, даже если белые -пробелы являются пробелами вкладок NL или CR.
Возможно, более надежным решением будет использование регулярного выражения:
$ var=$' \t 2492 some string continues here '
$ regex='^[[:space:]]*([^[:space:]]+)'
$ [[ $var =~ $regex ]] && var=${BASH_REMATCH[1]}
$ echo "$var"
2492
Вы можете получить номер задания для отправки at
с помощью такого кода. В примере представлено задание, которое просто спит в течение пяти минут, поэтому вам, очевидно, придется его настроить. Вывод из отправки at
похож на job 1175 at Mon Feb 24 18:28:00 2020
, и команда grep
совпадает с этим, чтобы извлечь номер задания
job=$( echo "sleep 300" | at now 2>&1 | grep -oP 'job\s+\K\d+' )
echo "The job identifier is $job"
Невозможно определить номер задания до его отправки в at
.