2013-03-25 62 views
4

代字符需要在bash脚本中转义吗?bash escape〜tilde

我试图用\来逃避它,但它没有帮助。如果我删除〜字符,下面的代码按预期工作。

  if ! [[ "$line" =~ ^[0-9a-zA-Z-~]+$ ]]; then 
        echo "skipping .. $line" 
        continue 
      fi 

如何在上述表达式中添加波浪号字符?

回答

8

不要放〜之后 - 。将正则表达式更改为:

if ! [[ "$line" =~ ^[0-9a-zA-Z~-]+$ ]]; then 

你会没事的。

请看this post以获得更多解释为什么连字符可能是该类的最后一个元素。

+0

Bash只是因为'-'用于在'[]'中指定范围而被混淆了,除非它是第一个或最后一个。 – 2013-03-25 23:30:27

+1

这不仅是'bash',请参阅后添加的链接 – 2013-03-25 23:30:54

+0

现在确实有道理。感谢您的链接 – surajz 2013-03-26 02:03:12