Вы можете использовать уловки:
echo " $EVAR"
echo -e "\055E"
echo $'\055E'
Но, как я уже сказал, это уловки. Реальное решение - всегда использовать printf:
$ printf '%s\n' "$EVAR"
-E
atq | awk '/Oct 29/ { print $1 }'
Это напечатает идентификаторы заданий, содержащих строку Oct 29
.
Что делает код awk
, так это сопоставляет заданное регулярное выражение с каждой из входных строк, и для строк, которые соответствуют ему, печатает первое поле с разделителями пробелами -в строке (идентификатор задания ).
Передача результата этого короткого конвейера в xargs atrm
приведет к удалению заданий:
atq | awk '/Oct 29/ { print $1 }' | xargs atrm
Утилита xargs
читает из своего стандартного потока ввода и выполняет данную утилиту с прочитанным аргументом. Если есть много аргументов (, вероятно, нет, в этом случае ), xargs
утилита может выполняться несколько раз.
Вы можете просто передать вывод atq
и немного его обработать:
atrm $( atq | grep 'Oct 29' | cut -d' ' -f 1 | tr '\n' ' ' )
Что делается:
Oct 29
из atq
вывод cut
и используя пробел в качестве разделителя tr
Это дает вам только номера заданий at
в одной строке, которые затем могут быть вашим вводом для atrm
.
Предварительно проверьте выбор, перечислив только идентификаторы заданий, просто используя
atq | grep 'Oct 29' | cut -d' ' -f 1 | tr '\n' ' '