【发布时间】:2019-12-12 03:18:00
【问题描述】:
对不起,如果这样的问题已经有了答案,我真的不知道该怎么说,所以我会尽力而为。
如何使 if 语句匹配整个字符串,或匹配带有额外字符的整个字符串?
假设$animals 变量中存储了,dog,cat,pig,bird,goat,。我想看看用户定义的变量$your_pet 是否是逗号分隔值之一,或者是否在末尾带有“s”。
所以也许会有这样的工作:
your_pet=bird
if [[ "${your_pet}" == ,*"${animals}"*, || "${your_pet}"s == ,*"${animals}"*, ]]
then
....
但是,我需要检查$your_pet 是否以“s”结尾,如果有或没有,则接受它。 (上面的代码未经测试,但我几乎可以肯定它不会工作)。
以下是$your_pet 的所有允许值:
dog
dogs
cat
cats
pig
pigs
bird
birds
goat
goats
以下是一些不允许允许的示例:
my dog
my dogs
dog
hamster
hamsters
我觉得在 if 语句中使用正则表达式可以解决问题,但我对正则表达式知之甚少,不知道该使用什么。 (如果在这种情况下甚至需要正则表达式)
在 OS X 10.11.6 El Capitan 上使用 bash 3.2.57(1)-release
谢谢
【问题讨论】:
-
这可能会有所帮助:
[[ "$animals" =~ ,cats{0,1}, ]] && echo match -
@Cyrus 谢谢,但我需要检查
$your_pet(带或不带“s”)是否匹配$animals中的任何内容 -
不只是添加“s”的复数形式,例如“platypus”和“platypuses”,“ox”和“oxen”。您的方法基于对复数形成方式的过度简化。如果我要实现这一点,我会简单地将每只动物的单数和复数形式存储在您的收藏中。它使代码变得简单、易懂和可靠。
-
@Bohemian 这只是一个简单的例子,在我的实际用例中这永远不会成为问题。
标签: regex bash macos if-statement command-line