Bash测试是否# - 在字符串中但不是# - #或# - # - #

时间:2015-03-17 00:17:33

标签: 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.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也是正面测试

1 个答案:

答案 0 :(得分:2)

在变量名称周围加上引号:

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