Note that here string behavior can also be accomplished (reversing the order) via piping and the echo command, as in: $ echo 'one two three' | LANG=C tr a-z A-Z ONE TWO THREE however here strings are particularly useful when the last command needs to run in the current process, as is the case with the read builtin: $ echo 'one two three' | read -r a b c $ echo "$a $b $c" yields nothing, while $ read -r a b c <<< 'one two three' $ echo "$a $b $c" one two three This happens because in the previous example piping causes read to run in a subprocess, and as such can not affect the environment of the parent process. Microsoft NMAKE In Microsoft NMAKE, here documents are referred to as inline files. Inline files are referenced as << or <<pathname: the first notation creates a temporary file, the second notation creates (or overwrites) the file with the specified pathname. An inline file is terminated with << on a line by itself, optionally followed by the (case-insensitive) keyword KEEP or NOKEEP to indicate whether the created file should be kept. target0: dependent0 command0 << temporary inline file ... << target1: dependent1 command1 << temporary, but preserved inline file ... <<KEEP target2: dependent2 command2 <<filename2 named, but discarded inline file ... <<NOKEEP target3: dependent3 command3 <<filename3 named inline file ... <<KEEP R R does not have file literals, but provides equivalent functionality by combining string literals with a string-to-file function. R allows arbitrary whitespace, including newlines, in strings. A string then can be turned into a file descriptor using the textConnection() function. For example, the following turns a data table embedded in the source code into a data-frame variable: str <- "State Population Income Illiteracy Life.Exp Murder HS.Grad Frost Alabama 3615 3624 2.1 69.05 15.1 41.3 20 Alaska 365 6315 1.5 69.31 11.3 66.7 152 Arizona 2212 4530 1.8 70.55 7.8 58.1 15 Arkansas 2110 3378 1.9 70.66 10.1 39.9 65" x <- read.table(textConnection(str), header=TRUE, row.names=1) Data segment Perl and Ruby have a form of file literal, which can be considered a form of data segment. In these languages, including the line (Perl) or (Ruby, old Perl) marks the end of the code segment and the start of the data segment. Only the contents prior to this line are executed, and the contents of the source file after this