Ici, les documents avec le <<-HERE
terminateur fonctionnent bien pour les chaînes de texte sur plusieurs lignes indentées. Cela supprimera tous les onglets de début du document ici. (Les terminaisons de ligne resteront cependant toujours.)
cat <<-____HERE
continuation
lines
____HERE
Voir aussi http://ss64.com/bash/syntax-here.html
Si vous avez besoin de conserver certains espaces, mais pas tous, vous pouvez utiliser quelque chose comme
sed 's/^ //' <<____HERE
This has four leading spaces.
Two of them will be removed by sed.
____HERE
ou peut-être utiliser tr
pour se débarrasser des nouvelles lignes:
tr -d '\012' <<-____
continuation
lines
____
(La deuxième ligne a une tabulation et un espace à l'avant; la tabulation sera supprimée par l'opérateur de tiret avant le terminateur heredoc, tandis que l'espace sera conservé.)
Pour envelopper de longues chaînes complexes sur de nombreuses lignes, j'aime printf
:
printf '%s' \
"This will all be printed on a " \
"single line (because the format string " \
"doesn't specify any newline)"
Cela fonctionne également bien dans les contextes où vous souhaitez incorporer des éléments non triviaux de script shell dans un autre langage où la syntaxe du langage hôte ne vous permettra pas d'utiliser un document here, comme dans un Makefile
ou Dockerfile
.
printf '%s\n' >./myscript \
'#!/bin/sh` \
"echo \"G'day, World\"" \
'date +%F\ %T' && \
chmod a+x ./myscript && \
./myscript