2012-05-12 25 views
26

Zum Beispiel:Was bedeutet "<< -" in Ruby?

code = <<-EOH 
    bundle install 
    bundle exec unicorn -c /etc/unicorn.cfg -D 
EOH 

Was dieser Code zu tun hat? Was heißt <<-?

+5

Symbolhound ist eine Möglichkeit für die Syntax zu suchen, die Google nicht verarbeiten kann. –

Antwort

34

Es heißt Heredoc. Eine einfache Möglichkeit, mehrzeilige Strings zu definieren, die einfache oder doppelte Anführungszeichen enthalten können, ohne dass sie entfernt werden müssen.

Siehe mehr here, zum Beispiel.

Oft verwenden Sie heredocs, um große Codeabschnitte zu definieren. Some Editoren wissen darüber und können Syntax für Sie dort hervorheben (wenn Sie Sprache angeben). Schauen Sie:

strings vs heredocs

+0

Ich mag die Syntax Highlighting und lernte heute das auch erstmal. –

2

Sieht für mich wie heredoc. Die - ermöglicht dem Endbegrenzer Whitespace davor zu ignorieren.

Eine einfache Google-Suche gab mir this.

+1

Heredocs * würde * ein Schmerz sein, zu googeln. Das Konzept und die Implementierung sind beide seltsam, wenn Sie sie noch nie zuvor gesehen haben. –

+0

Ich hatte noch nie von Heredoc gehört, also war Google fruchtlos. Manchmal ist es schwierig, Namen auf unbekannte Symbole zu setzen. – fontno

+0

Ein '<< - END' in bash/shell löscht die vorhergehenden Leerzeichen, aber in Ruby ist es nicht so einfach, siehe meine Antwort mit den Änderungen in 2.3.x, die ein brachte Bit der Feature-Parität, während eine neue Syntax erforderlich ist. – dragon788

0

Sie mehrere Befehle in einem Block wie dies in der Chef-Rezept

bash 'Install ftppwd' do 
    code <<-EOH 
    mkdir #{ftppwd_dir} 
    chmod 775 #{ftppwd_dir} 
    chgrp #{batch_id} #{ftppwd_dir}/* 
    chown #{batch_id} #{ftppwd_dir}/* 
    EOH