Dans un script bash que j'ai reçu d'un autre programmeur, certaines lignes dépassaient 80 colonnes. Quel est le caractère ou la chose à ajouter à la ligne pour indiquer que la ligne continue sur la ligne suivante?
Dans un script bash que j'ai reçu d'un autre programmeur, certaines lignes dépassaient 80 colonnes. Quel est le caractère ou la chose à ajouter à la ligne pour indiquer que la ligne continue sur la ligne suivante?
Réponses:
Le caractère est une barre oblique inverse \
À partir du manuel bash :
La barre oblique inverse '\' peut être utilisée pour supprimer toute signification spéciale pour le prochain caractère lu et pour la continuation de ligne.
^M
. Le problème semble être que le script m'a été donné par quelqu'un qui utilise Windows. Une solution rapide dos2unix
:)
En général, vous pouvez utiliser une barre oblique inverse à la fin d'une ligne pour que la commande passe à la ligne suivante. Cependant, il existe des cas où les commandes sont implicitement continuées, à savoir lorsque la ligne se termine par un jeton qui ne peut pas légalement terminer une commande. Dans ce cas, le shell sait que plus est à venir, et la barre oblique inverse peut être omise. Quelques exemples:
# In general
$ echo "foo" \
> "bar"
foo bar
# Pipes
$ echo foo |
> cat
foo
# && and ||
$ echo foo &&
> echo bar
foo
bar
$ false ||
> echo bar
bar
La continuation implicite entre guillemets est différente, mais liée. Dans ce cas, sans barre oblique inverse, vous ajoutez simplement une nouvelle ligne à la chaîne.
$ x="foo
> bar"
$ echo "$x"
foo
bar
Avec une barre oblique inverse, vous divisez à nouveau la ligne logique en plusieurs lignes logiques.
$ x="foo\
> bar"
$ echo "$x"
foobar
[[
- ]]
condition, mais pas dans d' autres, et je suis en train de comprendre les règles.
\
Fait le travail. La réponse de @ Guillaume et le commentaire de @ George répondent clairement à cette question. Ici, j'explique pourquoi The backslash has to be the very last character before the end of line character.
Considérez cette commande:
mysql -uroot \ -hlocalhost
S'il y a un espace après \
, la continuation de ligne ne fonctionnera pas. La raison en est que cela \
supprime la signification spéciale du caractère suivant qui est un espace et non le caractère de saut de ligne invisible. Le caractère de saut de ligne est après l'espace pas \
dans cet exemple.