当变量与列表中的某个字符串匹配时,使 if 语句为真

当变量与列表中的某个字符串匹配时,使 if 语句为真

我有一个命令将输出以下内容(curl -sSL $location | grep -o "title\=\".*\"\ agent" | grep -o "\".*\"" | grep -o "[a-zA-Z0-9].*[a-zA-Z0-9]"):

Films
TV Series

我需要创建一个 if 语句,其中一个变量需要与其中一个匹配。例如

if [[ $option = Films ]] || [[ $option = "TV Series" ]]
then
    echo "True"
fi

但问题是,电影和电视剧可能会发生变化。名称可能会有所不同。并且可能会有更多字符串,例如Films, TV Series, Music, Radio etc. etc.movie, serie, radio, music。我需要获取它,以便变量 ( $option) 能够匹配命令产生的任何输出。它不必匹配每一个,只需匹配一个就足够了,例如

Output command:
Films
TV Series
Radio

$option=TV Series -> True
$option=Radio -> True

Output command:
Films

$option=Films -> True
$option=radio -> False

答案1

将所有类型保存在一个没有空格的数组中。然后您可以将您的标记与数组进行匹配(或者您也可以用单词表示字符串)。

#!/bin/bash

a=(Films TVSeries Music Radio)

option="TV Series"

[[ " ${a[*]} " \
    =~ " ${option// /} " ]] \
&& echo true || echo false

答案2

如果命令的输出是一个列表,如问题中所示,则可以将其保存在数组中,并根据它检查变量:

mapfile -t a < <(curl...)

option="TV Series"

[[ "${a[@]}" =~ "$option" ]] && \
  echo "$option → True" || \
  echo "$option → False"

答案3

以下有效:

if [[ "$option" == $(curl -sSL $location | grep -o "title\=\".*\"\ agent" | grep -o "\".*\"" | grep -o "$option") ]]
then
   echo true
else
   echo false
fi

尽管我还没有测试过,但这也应该可行。

if ! [[ -z $(curl -sSL $location | grep -o "title\=\".*\"\ agent" | grep -o "\".*\"" | grep -o "$option") ]]
then 
   echo true
else
   echo false
fi

相关内容