2017-07-17 12 views
0

端末を開いたときのカスタムzshテーマを作っています。私はoh-my-zshを使うのが初めてではありませんが、私はzshのドキュメントが初めてです。アポストロフィをASCIIで表示しているときにエラーが発生しました

  1. /Users/User/.oh-my-zsh/:私はターミナルでそれをしようとすると、私は2つのエラーを取得し

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

    :ここ

    は私が問題を抱えてんですよ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'はお友達です。しかし、ほとんどの場合、シェル固有のメタキャラクタからエスケープする必要があります。必要なエスケープ・レベルのレベルを知る必要があります。私はああ私のZshがスタートアップファイルを出すときにどれくらい必要なのか分からないので、答えはありません。しかし、エスケープと参照の単一のレベルから始めます。 – jdv

答えて

0

ここでの問題(jdvhis commentに記載されています)は引用しています。 zsh

  • 単一引用符で囲まれたテキストwithing単一引用符(')を使用することはできません。 2つの一重引用符内のテキストはそのまま使用しますが、追加の引用はできません。一重引用符は、先行するバックスラッシュまたは二重引用符で囲む必要があります。
  • 二重引用符(")バッククォート(`)内では、ドル記号($)とバックスラッシュ(\)は、特別に処理し、先行バックスラッシュで引用される必要があります。

ASCIIアートにはかなりの文字が表示されるため、これらの文字はすべて正しく引用されていることを確認する必要があります。

さらに、組み込みのprintを使用します(デフォルトでは、\もエスケープ文字として解釈されます)。

  • は完全に文字列を引用し、テキストを印刷するprint -rまたはecho -Eを使用します。

    は、2つの基本的な解決策があります。いずれの場合も、エスケープシーケンス処理を無効にします。

    完全な引用を達成する最も簡単な方法は、おそらく周囲の一重引用符を保持し、''\''に置き換えることです。すべての発生時に、これは前の一重引用符で囲まれたテキストを閉じ、引用された一重引用符を追加し、一重引用符で囲まれた新しいテキストを開始します。それ以外の特殊文字は、一重引用符で囲みます。

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

    'END'周りの単一引用符:

    wolf='    
          .-'\'''\'''\'''\'''\''-. 
         .'\''   `. 
         :    : 
         :    : 
         :  _/|  : 
         : =/_/  : 
         `._/ |  .'\'' 
         (/,|...-'\'' 
         \_/^\/||__ 
        _/~ `""~`"` \_ 
    __/ -'\''/ `-._ `\_\__ 
    / /-'\''` `\ \ \-.\\ 
    
    ' 
    print -r $wolf 
    
  • は全体の引用問題を回避するためにcatヒアドキュメントを使用してください。これは、here-document内でパラメータ置換($FOO)とコマンド置換($(command)または`command`)を無効にするために行う必要があります。

関連する問題