我有一个命令将输出以下内容(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