2017-07-17 54 views
0

我正在爲您打開終端時製作自定義zsh主題。我對使用oh-my-zsh並不陌生,但我對zsh文檔不熟悉。在ASCII中顯示撇號時出錯

這裏是我有什麼用的問題:

wolf='    
      .-'''''-. 
     .'   `. 
     :    : 
     :    : 
     :  _/|  : 
     : =/_/  : 
     `._/ |  .' 
     (/,|...-' 
     \_/^\/||__ 
    _/~ `""~`"` \_ 
__/ -'/ `-._ `\_\__ 
/ /-'` `\ \ \-.\\ 

' 


print -P $wolf 

當我嘗試在終端,我得到兩個錯誤:

  1. /Users/User/.oh-my-zsh/ themes/wolf.zsh-theme:4:沒有這樣的文件或目錄:。 .\n : :\n : :\n : _/| :\n : =/_/ :\n ._/|

  2. /Users/User/.oh-my-zsh/themes/wolf.zsh-theme:31:解析錯誤附近'\ n

我猜測,這些錯誤必須做與ASCII藝術中的撇號。

+0

'set -x'和'set -v'是你的朋友。但是,幾乎可以肯定的是,您需要轉義shell特定的元字符,並且您需要知道需要多少級別的轉義。我不確定我的Zsh在獲取啓動文件時需要多少哦,所以不是答案。但從一個級別的逃跑和看到開始。 – jdv

回答

0

這裏的問題(如jdvhis comment中指出)引用。

zsh

  • ,不可能使用單引號(')withing單引號的文本。兩個單引號內的任何文字都是逐字記錄的,不需要額外引用。單引號只能用前面的反斜槓或雙引號引起來。
  • 在雙引號(")反引號(`),美元符號($)和反斜線(\)經特殊處理,並且需要與前面的反斜槓引用。

由於相當多的這些字符出現在您的ASCII藝術中,您必須確保它們全部引用正確。

此外,您使用內置print,默認情況下,它也將\解釋爲轉義字符。

有兩種基本的解決方案:

  • 完全引用字符串和使用print -recho -E打印文本。在這兩種情況下,參數禁用轉義序列處理。

    實現完整報價的最簡單方法可能是保留周圍的單引號,並用'\''替換任何'。在每次發生時,都會關閉以前的單引號文本,添加一個引用的單引號並開始一個新的單引號文本。然後在單引號內引用任何其他特殊字符。

    wolf='    
          .-'\'''\'''\'''\'''\''-. 
         .'\''   `. 
         :    : 
         :    : 
         :  _/|  : 
         : =/_/  : 
         `._/ |  .'\'' 
         (/,|...-'\'' 
         \_/^\/||__ 
        _/~ `""~`"` \_ 
    __/ -'\''/ `-._ `\_\__ 
    / /-'\''` `\ \ \-.\\ 
    
    ' 
    print -r $wolf 
    
  • 使用這裏文檔cat,以避免整個報價問題:

    cat <<'END' 
          .-'''''-. 
         .'   `. 
         :    : 
         :    : 
         :  _/|  : 
         : =/_/  : 
         `._/ |  .' 
         (/,|...-' 
         \_/^\/||__ 
        _/~ `""~`"` \_ 
    __/ -'/ `-._ `\_\__ 
    / /-'` `\ \ \-.\\ 
    
    END 
    

    注意周圍'END'單引號。這需要完成以禁用參數替換($FOO)和命令替換($(command)`command`)在here-document中。