Bash 如果#-在字符串中但不是#-#或#-#-#
我对一个文件有5种不同的引用和位置,如中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
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=[#-#]因为它不能返回。或者我应该颠倒测试的顺序吗?我并不想改变测试顺序,因为可能会有更多的第一个测试,所以先测试它将消除很多处理。第二个和第三个也一样。第四种只有几个,最后一种只有一个,这使它成为一个很好的失败