336 votes

Comment sortir une chaîne multiligne dans Bash?

Comment puis-je sortir une chaîne multipline dans Bash sans utiliser plusieurs appels d'écho comme ceci:

 echo "usage: up [--level <n>| -n <levels>][--help][--version]"
echo 
echo "Report bugs to: "
echo "up home page: "
 

Je cherche un moyen portable de le faire, en utilisant uniquement les commandes intégrées de Bash.

MODIFIER

C'est la solution que j'ai proposée, qui est une variante de la réponse de Dennis.

 read -d '' help <<- EOF
  usage: up [--level <n>| -n <levels>][--help][--version]

  Report bugs to:
  up home page:
EOF 

echo "$help"
 

402voto

Dennis Williamson Points 105818

Ici, les documents sont souvent utilisés à cette fin.

 cat << EOF
usage: up [--level <n>| -n <levels>][--help][--version]

Report bugs to: 
up home page:
EOF
 

Ils sont pris en charge dans tous les shells dérivés de Bourne, y compris toutes les versions de Bash.

224voto

Chris Mohr Points 1149

ou vous pouvez faire ceci:

 echo "usage: up [--level <n>| -n <levels>][--help][--version]

Report bugs to: 
up home page: "
 

39voto

nhahtdh Points 28167

Utiliser -e option, vous pouvez ensuite les imprimer caractère de nouvelle ligne avec \n dans la chaîne.

De l'échantillon (mais pas sûr que ce soit bon ou pas)

La chose amusante est que l' -e option n'est pas documentée dans MacOS la page de manuel de alors que encore utilisables. Il est documenté dans la page de man de Linux.

25voto

Gordon Davisson Points 22534

Depuis que j'ai recommandé printf dans un commentaire, je devrais probablement vous donner quelques exemples de son utilisation (bien que pour l'impression d'un message d'utilisation, je serais plus susceptibles d'utiliser Dennis ou Chris réponses). printf est un peu plus complexe à utiliser que echo. Son premier argument est une chaîne de format, qui s'en échappe (comme \n) sont toujours interprétés; il peut aussi contenir des directives de format en commençant par %, qui, où et comment des arguments supplémentaires sont inclus en elle. Ici, deux approches différentes de l'utiliser pour un message d'utilisation:

Tout d'abord, vous pouvez inclure l'intégralité du message dans la chaîne de format:

printf "usage: up [--level <n>| -n <levels>][--help][--version]\n\nReport bugs to: \nup home page: \n"

Notez que, contrairement aux echo, vous devez inclure le saut de ligne final explicitement. Aussi, si le message arrive à contenir les éventuelles % personnages, ils doivent être écrits en tant que %%. Si vous vouliez inclure le rapport de bogue et la page d'accueil adresses, ils peuvent être ajoutés tout naturellement:

printf "usage: up [--level <n>| -n <levels>][--help][--version]\n\nReport bugs to: %s\nup home page: %s\n" "$bugreport" "$homepage"

Deuxièmement, vous pouvez simplement utiliser la chaîne de format pour le faire imprimer chaque argument supplémentaire sur une ligne distincte:

printf "%s\n" "usage: up [--level <n>| -n <levels>][--help][--version]" "" "Report bugs to: " "up home page: "

Avec cette option, en ajoutant le rapport de bogue et la page d'accueil adresses est assez évident:

printf "%s\n" "usage: up [--level <n>| -n <levels>][--help][--version]" "" "Report bugs to: $bugreport" "up home page: $homepage"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X