если с регулярным выражением в коде bash

Панель Cinnamon (, которая содержит системный трей ), является неотъемлемой частью Cinnamon и поэтому не может быть отключена или остановлена. Единственный способ добиться скрытого эффекта — использовать автоматический режим скрытия -или установить высоту панели задач равной нулю пикселей. Однако это только скрывает панель, а не останавливает ее. К сожалению, это означает, что нет способа остановить панель Cinnamon.

Вероятно, вы захотите попробовать использовать другую среду рабочего стола или вообще не использовать ее.

5
10.03.2020, 12:03
4 ответа

Вы можете сделать это с помощью bashвстроенного -в сопоставлении строк. Обратите внимание, что здесь используются шаблоны glob (wildcard ), а не регулярные выражения.

if [[ $(cat /etc/redhat-release  | awk '{print $7}') == 7.[56] ]]

Или, если мы устраним UUoC:

if [[ $(awk '{print $7}' /etc/redhat-release) == 7.[56] ]]

или...

if [[ $(cat /etc/redhat-release) == *" release 7."[56]" "* ]]

или даже (спасибо @kojiro )...

if [[ $(< /etc/redhat-release) == *" release 7."[56]" "* ]]

(Обратите внимание, что подстановочные знаки в начале и в конце необходимы для соответствия всей строке. Пробел в кавычках после числа нужен для того, чтобы оно случайно не совпало с «7,50».)

Или, если вы действительно хотите использовать регулярные выражения, используйте =~и переключитесь на синтаксис RE:

if [[ $(< /etc/redhat-release) =~ " release 7."[56]" " ]]

(Обратите внимание, что часть в кавычках будет соответствовать буквально, поэтому .не нужно экранировать или заключать в квадратные скобки (, пока вы не включите bash31совместимость ). И совпадения RE по умолчанию не привязаны, поэтому вам не нужно ничего на концах, как в последнем.)

11
28.04.2021, 23:21

Гораздо проще просто проверить строку релиза напрямую

if grep -q 'release 7\.[56] ' /etc/redhat-release
then...

Команда grepсоответствует регулярному выражению. Атом [56]соответствует 5или 6, позволяя шаблону соответствовать 7.5или 7.6. Поскольку .соответствует любому символу , я экранировал его обратной косой чертой, чтобы он соответствовал буквальной точке. Пробел в конце гарантирует, что после совпадающей строки версии не будет других символов.

15
28.04.2021, 23:21

awk может выполнять всю работу catи [[...]]здесь:

if
  </etc/redhat-release awk -v ret=1 '
    $7 ~ /^7\.[56]$/ {ret=0}
    END {exit(ret)}'
then
 ...

Или просто со стандартным shсинтаксисом с простым сопоставлением шаблонов с подстановочными знаками:

case $(cat /etc/redhat-release) in
  (*'release 7.'[56]' '*)...;;
  (*)...;;
esac
4
28.04.2021, 23:21

Bash может извлекать поле 7 строки, используя read, и эти файлы типа «/etc/*-release» в любом случае обычно состоят из одной строки. Рассмотрим

read _ _ _ _ _ _ ver _ < /etc/redhat-release
if [[ $ver = 7.[56] ]]; then
    # match
fi
3
28.04.2021, 23:21

Теги

Похожие вопросы