2016-08-05 14 views

Antwort

6

In man bash, wenn Sie nach <<- suchen (durch Eingabe von: /<<- und Enter), finden Sie:

If the redirection operator is <<-, then all leading tab characters are 
    stripped from input lines and the line containing delimiter. This 
    allows here-documents within shell scripts to be indented in a natural 
    fashion. 

Zum Beispiel:

$ cat << EOF 
>  hello 
> there 
> EOF 
    hello 
there 

Das Gleiche, aber unter Verwendung von <<- anstelle von <<

$ cat <<- EOF 
>  hello 
> there 
> EOF 
hello 
there 

Das führende TAB-Zeichen in der "Hallo" -Zeile wird entfernt.

Als Zitat aus der man Seite sagte dies ist nützlich in Shell-Skripten, zum Beispiel:

if cond; then 
    cat <<- EOF 
    hello 
    there 
    EOF 
fi 

Es ist üblich, die Linien innerhalb Codeblöcke, wie in dieser if Aussage, zur besseren Lesbarkeit einrücken .

if cond; then 
    cat << EOF 
hello 
there 
EOF 
fi 

Das ist sehr unangenehm zu lesen, und es wird noch viel schlimmer in einem komplexeren realistisch Skript: Ohne die <<- Operator Syntax, würden wir den obigen Code so schreiben gezwungen werden. obwohl

Denken Sie daran, wie @glenn-jackman wies darauf hin:

Beachten Sie, dass nur Tabulatorzeichen entfernt werden, nicht beliebig Leerzeichen. Achten Sie darauf, dass Ihr Texteditor Tabulatoren nicht in Leerzeichen konvertiert.

+0

Beachten Sie, dass nur * Tab-Zeichen * entfernt werden, keine willkürlichen Leerzeichen. Achten Sie darauf, dass Ihr Texteditor Tabulatoren nicht in Leerzeichen konvertiert. –

+0

@glennjackman, du hast Recht, das ist gut, darauf hinzuweisen, zu meinem Beitrag hinzugefügt, danke! – janos

+1

Deshalb verwende ich sie nicht: Ich traue anderen (oder mir) nicht, die Tab-Zeichen zu pflegen. Ich lebe mit dem Hässlichen. –