Я ищу в конструкции bash
, чтобы решить, является ли переменная $WORD
одним из определенных слов. Мне нужно что-то вроде этого:
if "$WORD" in dog cat horse ; then
echo yes
else
echo no
fi
у bash есть такая конструкция? Если нет, то что будет ближе всего?
bash
shell-script
Мартин Вегтер
источник
источник
shopt -s nocasematch
может помочь, если вы хотите, чтобы поиск не учитывал регистр.[[
и]]
-[
и]
не достаточно.[[ "$ARG" =~ ^(true|false)$ ]] || { echo "Argument received invalid value" ; exit 1 ; }
источник
Как насчет:
Затем:
источник
источник
$WORD
пусто, он будет соответствовать , еслиWORD=ca
илиWORD=og
или подобным , и я предполагаю , что вы имели в видеecho ${set[@]}
.Вы можете определить функцию bash для этого:
Затем используйте просто так:
источник
Я искал решение «в одну строку» для проверки аргумента сценария и использовал ответ Джозефа Р. выше, чтобы придумать:
[[ "$ARG" =~ ^(true|false)$ ]] || { echo "Argument received invalid value" ; exit 1 ; }
источник
Это сработало для меня:
источник
Возможно, вы захотите поместить список слов в файл, если вы часто меняете список или хотите, чтобы он использовался несколькими сценариями. И вам может понадобиться поместить слова в файл, если список становится слишком длинным для управления в сценарии. Тогда вы можете сказать
источник
Если слова представляют собой список, в котором значения разделены новой строкой, вы можете сделать следующее:
источник
Вы можете использовать fgrep, чтобы указать все разрешенные слова:
-w
Флаг соответствует только полные слова, то-q
флаг позволяет работать тихо (потому что все , что нужно это возвращаемое значение для если заявление использования), и каждый-e
шаблон задает шаблон , чтобы позволить.fgrep
версия grep, которая выполняет обычное сопоставление строк вместо сопоставления с регулярным выражением Если у вас естьgrep
, вы должны иметьfgrep
, но если нет, то это идентично использованиюgrep
с-F
флагом (так что вы просто заменитеfgrep -wq
выше наgrep -Fwq
).источник