Tôi đang cố gắng để chạy này:python lệnh multiline chạy từ bash
python -c "for i in range(10):\n print i"
nhưng tôi nhận được một lỗi:
File "<string>", line 1
for i in range(10):\n print i
^
SyntaxError: unexpected character after line continuation character
Theo this tôi cho rằng bash
nên đã xử lý (cụ thể là, biểu thức dòng lệnh) đối số dòng lệnh nhưng lỗi được trả về cho biết trường hợp ngược lại. Tôi đang ở đâu sai, và tại sao điều này lại xảy ra?
P.S. python-2,7
EDIT
Hãy để tôi giải thích động lực của tôi một chút. Ví dụ mã này chắc chắn là khá ngớ ngẩn. Kể từ the doc nói rằng "command
có thể là một hoặc nhiều câu lệnh được phân tách bằng dòng mới, với khoảng trắng phía trước quan trọng như trong mã mô-đun bình thường", tôi quan tâm đến cách tôi nên mang những dòng mới được đề cập đến command
đúng cách. Các giải pháp đề xuất ở đây là:
Sử dụng
;
để phân biệt một số lệnh bên trong vòng lặp. Có, nhưng nó vẫn là một lớp lót, tôi không thể sử dụng nó nếu tôi muốn chạy một số lệnh sau vòng lặp.;
không thay thế cho dòng mới.Nhập
^M
nơi cần dòng mới. Điều này đạt mục tiêu chính xác hơn nhưng không may, theo quan điểm của tôi, điều này về cơ bản hủy hoại toàn bộ ý tưởng chạy mã python từ dòng lệnh vì nó đòi hỏi chế độ tương tác. Theo tôi hiểu nó giống như nhập một lệnh kiến đánhEnter
phím. Vì vậy, không có sự khác biệt để gõpython
và làm việc trong vỏ của nó. Điều đó nói rằng, tôi không thể viết điều này trong một kịch bản bash. Hoặc tôi có thể?
Có lẽ câu hỏi thực sự nên đã được tách ra thành hai cái:
- Bash thoát:
Enclosing characters in double quotes (‘"’) preserves the literal value of all characters within the quotes, with the exception of ‘$’, ‘
’, ‘\’, and, when history expansion is enabled, ‘!’. The characters ‘$’ and ‘
’ retain their special meaning within double quotes (see Shell Expansions). The backslash retains its special meaning only when followed by one of the following characters: ‘$’, ‘`’, ‘"’, ‘\’, or newline.
Làm thế nào để tương ứng này đối với trường hợp được mô tả? Bash xử lý các dòng mới như thế nào? Tôi thấy rằng việc đưa lệnh vào dấu ngoặc đơn không làm thay đổi.
- Làm thế nào để chuyển một dòng mới đến python theo cách không tương tác.(Bạn có thể nói - tại sao bạn không viết một tệp trăn thông thường với tất cả các dòng mới bạn muốn - bạn đúng nhưng tôi quan tâm đến những gì chính xác có nghĩa là trong tài liệu kể từ khi nó báo giá dòng mới)
Phiên bản python nào bạn đang chạy? – DanHabib