Câu trả lời:
Ký tự là một dấu gạch chéo ngược \
Ký tự gạch chéo ngược '\' có thể được sử dụng để loại bỏ bất kỳ ý nghĩa đặc biệt nào đối với ký tự tiếp theo được đọc và để tiếp tục dòng.
^M
. Vấn đề dường như là tập lệnh đã được đưa cho tôi bởi một người nào đó sử dụng cửa sổ. Một cách nhanh chóng dos2unix
cố định nó :)
Nói chung, bạn có thể sử dụng dấu gạch chéo ngược ở cuối dòng để lệnh tiếp tục sang dòng tiếp theo. Tuy nhiên, có những trường hợp các lệnh được tiếp tục một cách ngầm định, cụ thể là khi dòng kết thúc bằng mã thông báo thì không thể kết thúc lệnh một cách hợp pháp. Trong trường hợp đó, trình bao biết rằng sẽ có nhiều hơn và dấu gạch chéo ngược có thể được bỏ qua. Vài ví dụ:
# In general
$ echo "foo" \
> "bar"
foo bar
# Pipes
$ echo foo |
> cat
foo
# && and ||
$ echo foo &&
> echo bar
foo
bar
$ false ||
> echo bar
bar
Khác nhau, nhưng có liên quan, là sự tiếp diễn ngầm bên trong dấu ngoặc kép. Trong trường hợp này, không có dấu gạch chéo ngược, bạn chỉ cần thêm một dòng mới vào chuỗi.
$ x="foo
> bar"
$ echo "$x"
foo
bar
Với dấu gạch chéo ngược, bạn lại đang tách dòng logic thành nhiều dòng logic.
$ x="foo\
> bar"
$ echo "$x"
foobar
[[
- ]]
điều kiện, nhưng không phải trong những trường hợp khác, và tôi đang cố gắng tìm ra các quy tắc.
\
Làm công việc. Câu trả lời của @ Guillaume và bình luận của @ George đã trả lời rõ ràng câu hỏi này. Ở đây tôi giải thích tại sao The backslash has to be the very last character before the end of line character.
Hãy xem xét lệnh này:
mysql -uroot \ -hlocalhost
Nếu có khoảng trắng sau \
, việc tiếp tục dòng sẽ không hoạt động. Lý do là \
loại bỏ ý nghĩa đặc biệt cho ký tự tiếp theo là khoảng trắng không phải là ký tự nguồn cấp dòng ẩn. Ký tự nguồn cấp dữ liệu dòng nằm sau dấu cách không có \
trong ví dụ này.