行が次の行に続くことをbashに伝える方法


回答:


127

文字はバックスラッシュです \

bashマニュアルから:

バックスラッシュ文字「\」を使用して、次に読み込まれる文字や行の継続のための特別な意味を取り除くことができます。


ありがとう。そして、bashスクリプトの列の通常の制限は何ですか?
道を開く

bashには興味深い列制限はありません。明確にするために、列ごとに70〜80文字に制限するようにしてください。
Habbie

9
@RyanMバックスラッシュは、行末文字の前の最後の文字でなければなりません。\の後に空白がないことを確認しますか?
ジョージ

9
@ジョージうん。もう少しいじると、エラーが吐き出されます^M。問題は、スクリプトがWindowsを使用する誰かによって私に与えられたということです。簡単にdos2unix修正:)
RyanM 2013年

2
@Georgeあなたのコメントは私を救ってくれました。\の後にスペースがあり、何が問題なのか理解できませんでした。乾杯!
去る

36

一般に、コマンドを次の行に続けるために、行の最後にバックスラッシュを使用できます。ただし、コマンドが暗黙的に継続される場合、つまり、行がトークンで終了し、コマンドを正当に終了できない場合があります。その場合、シェルは次が来ることを知っているので、バックスラッシュは省略できます。いくつかの例:

# In general
$ echo "foo" \
> "bar"
foo bar

# Pipes
$ echo foo |
> cat
foo

# && and ||
$ echo foo &&
> echo bar
foo
bar
$ false ||
> echo bar
bar

異なるが関連しているのは、引用符内の暗黙の継続です。この場合、バックスラッシュなしで、単に文字列に改行を追加します。

$ x="foo
> bar"
$ echo "$x"
foo
bar

バックスラッシュを使用すると、論理行が複数の論理行に分割されます。

$ x="foo\
> bar"
$ echo "$x"
foobar

コマンドが暗黙的に次の行に継続されるような状況の正式なリストはありますか?[[- ]]条件内の特定の状況ではバックスラッシュを省略できるように思えますが、他の状況ではそうではなく、ルールを理解しようとしています。
Menachem 2018年

16

\仕事をします。@Guillaumeの回答と@Georgeのコメントがこの質問に明確に答えています。ここで、The backslash has to be the very last character before the end of line character.このコマンドを検討する理由を説明します。

   mysql -uroot \
   -hlocalhost      

の後\にスペースがある場合、行の継続は機能しません。その理由は、\ 非表示の改行文字ではなくスペースである次の文字の特別な意味を取り除くためです。\この例では、改行文字はスペースの後にあります。


2
「最後のキャラ」の部分を指摘していただきありがとうございます。私はこのバグを正確に追跡するのに少しイライラしていました。
Jason
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.