Bash 如果#-在字符串中但不是#-#或#-#-#

Bash 如果#-在字符串中但不是#-#或#-#-#,bash,Bash,我对一个文件有5种不同的引用和位置,如中 search | contents #- | some.htm#9-22 called pat= #-# | some.htm#1-some.htm#3 called pat2= #-#-# | some.htm#21-some.htm#-some.htm#4 called pat3= ; | some.h

我对一个文件有5种不同的引用和位置,如中

search  | contents
  #-    | some.htm#9-22                             called pat=
 #-#    | some.htm#1-some.htm#3                     called pat2=
#-#-#   | some.htm#21-some.htm#-some.htm#4          called pat3=
   ;    | some.htm#6-some.htm#13;some.htm#22-23     called pat4=
 else   | some.htm#
csv数据文件中大约有550个这样的引用

我遇到的问题是如何测试包含引用的变量,看看它是否包含上面列出的搜索列。我知道它包含特殊字符。我还没有找到在网上测试中搜索它们的参考

  pat=[#-]
  if [[ $ALIYAH == $pat ]]; then
  SHIR1="$(echo "$ALIYAH" |awk -F \# '{print $1}')"
  START1="$(echo "$ALIYAH" |awk -F \# '{print $2}'|awk -F - '{print $1}')"
  END1="$(echo "$ALIYAH" |awk -F - '{print $2}')"
  return
谢谢

因此,我做了下面建议的更改,但没有乐趣。该测试不匹配,因此处于默认状态,并且没有进行应有的处理。调试输出

+ for ALIYAH in '"${arr[@]:2:11}"'
+ pat='[#-]'
+ [[ some.htm#11-38 == \[\#\-\] ]]
++ echo some.htm#11-38
++ awk -F '#' '{print $1}'
+ SHIR10=some.htm  # this is the fall through, it should fill SHIR1
所以在进一步搜索之后,我试着

if [[ "$ALIYAH" =~ [#-] ]]; then
这就阻止了它的坠落


正如我担心的那样,模式2和模式3的测试结果为阳性,在变量名周围加上引号:

if [[ "$ALIYAH" == "$pat" ]]; then
...etc...

似乎已经奏效了,但仍然需要构建“then”部分,下一个部分将不会返回正数$pat=[#-]为$pat1=[#-#]因为它不能返回。或者我应该颠倒测试的顺序吗?我并不想改变测试顺序,因为可能会有更多的第一个测试,所以先测试它将消除很多处理。第二个和第三个也一样。第四种只有几个,最后一种只有一个,这使它成为一个很好的失败