一个Bash脚本,用于检查字符串是否存在于逗号分隔的字符串列表中

Nik*_*tus 5 bash shell

我想知道一种简洁的方法,我可以检查字符串是否存在于逗号分隔的字符串值中.例如:如果

x="abc,def,ghi"
y="abc"
Run Code Online (Sandbox Code Playgroud)

它应该返回true

而如果

y="ab"
Run Code Online (Sandbox Code Playgroud)

那么它应该返回false

PSk*_*cik 9

你可以使用globs:

[[ ",$x," = *",$y,"* ]]
Run Code Online (Sandbox Code Playgroud)

  • 您也可以通过这种方式对字符串进行规范化(在开头和结尾添加逗号)并使用正则表达式匹配 `[[ ",$x," =~ ",$y," ]]` - 甚至更短一个字符. (2认同)
  • 好点 - 这是列表的规范化,使您的答案更简单. (2认同)

mkl*_*nt0 5

使用bash的正则表达式匹配运算符=~:

[[ $x =~ (^|,)"$y"(,|$) ]]
Run Code Online (Sandbox Code Playgroud)

警告:虽然上述正则表达式恰好是便携式,通过支持正则表达式的特殊香味=~与平台相关的,由于使用特定平台的正则表达式库.

举个例子:hek2mgl建议使用\b匹配字边界,这适用于Linux,但不适用于OSX.最接近的东西\b在POSIX是[[:<:]][[:>:]],但不幸的是,这些不工作在Linux上.