2013-03-25 57 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