Centos8/RHEL8 -Как установить пакет dnf с отсутствующими зависимостями?

В bash\является оператором кавычек, подобным 'и ". Так:

[[ "$(getent group groupname)" =~ \busername\b ]]

совпадает с:

[[ "$(getent group groupname)" =~ 'b'username'b' ]]

Начиная с bash3.2, bash гарантирует, что когда вы заключаете символ в регулярное выражение в кавычках, он удаляет его специальное значение как оператора регулярного выражения, если оно было (, что не относится кb).

В bash3.1 вы могли бы сделать:

[[ "$(getent group groupname)" =~ '\busername\b' ]]

И вы все еще можете это сделать, если включите опцию bash31или установите $BASH_COMPATна 3.1. Это также будет работать в zsh.

Это сработало бы в системах, где системная расширенная библиотека регулярных выражений поддерживает это \bне -стандартное расширение (, как в последних системах GNU ).

В bash 3.2 и более поздних версиях это не работает, потому что, цитируя \, bash удаляет особенность \как оператора регулярного выражения (, по сути, он вызывает библиотеку регулярных выражений с \\busername\\b.

Что вы можете сделать, так это написать это:

regexp='\' # here using the slightly more portable \< \> instead of \b
[[ "$(getent group groupname)" =~ $regexp ]] # make sure $regexp is *not* quoted

Тогда он будет работать как с bash 3.1, так и с bash 3.2+ (, а также с zsh и ksh93 ). См. . Как сохранение регулярного выражения в переменной оболочки позволяет избежать проблем с заключенными в кавычки символами, специфичными для оболочки? для получения более подробной информации об этом.

А здесь,Я бы использовал стандартный синтаксис shи сделал бы:

group=groupname
user=username

group_definition=$(getent -- group "$group") || exit
case,${group_definition##*:}, in
  (*,"$user",*) printf '%s\n' "$user is in the $group group\n"
esac

Это также работает более надежно, если имя пользователя содержит операторы регулярного выражения(.часто встречается в именах пользователей )или имя пользователя совпадает с именем группы.

1
27.07.2021, 01:04
0 ответов

Теги

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