Chỉ tìm thấy một vấn đề khác có thể xảy ra: nếu bạn đang sử dụng X
ký tự viết hoa, điều này xảy ra khi tôi thử sử dụng nó trong bc
:
X=3
(standard_in) 16: illegal character: X
(standard_in) 16: syntax error
Rõ ràng chỉ có các ký tự chữ thường là các biến (từ trang man: Số đầu vào có thể chứa các ký tự 0-9 và AF. (Lưu ý: Chúng phải là chữ hoa. Chữ thường là tên biến ).
Vì vậy, thay đổi sang một ký tự chữ thường khác (vì đã có chữ thường khác x
) sẽ là một ý tưởng tốt.
Tôi chỉ cố gắng một số thử nghiệm rất cơ bản, rõ ràng sử dụng print
trong bc
làm cho nó không in một ký tự dòng mới. Chỉ cần đặt biến / số trên dòng riêng của nó sẽ in một dòng mới:
$ echo "x=5; print x; print 999; x; 15; print 15; 12345"|bc
59995
15
1512345
Vì vậy, thay thế print x"\n";
dòng của bạn với chỉ x;
nên làm việc?
Và, sử dụng một \n
bản in cũng hoạt động, có thể bạn đã gặp vấn đề về trích dẫn ... khi tôi cố gắng lặp lại để bc
sử dụng dấu ngoặc kép (chắc chắn sai ;-) hoặc trích dẫn kép với một trích dẫn đơn lẻ đều \n
thất bại:
$ echo "x=5; print x; print 999; x; 15; print "15\n\n\n"; 12345"|bc
(standard_in) 1: syntax error
$ echo "x=5; print x; print 999; x; 15; print '15\n\n\n'; 12345"|bc
(standard_in) 1: illegal character: '
(standard_in) 1: illegal character: \
(standard_in) 1: syntax error
(standard_in) 1: illegal character: \
(standard_in) 1: illegal character: \
(standard_in) 1: illegal character: '
Nhưng sử dụng dấu ngoặc đơn cho tiếng vang và dấu ngoặc kép cho \n
s thì nó hoạt động
$ echo 'x=5; print x; print 999; x; 15; print "15\n\n\n"; 12345'|bc
59995
15
15
12345
Vì vậy, cũng thay thế print x"\n";
dòng của bạn với print "x\n";
nên làm việc quá?
Một trích dẫn thông tin từ man bc
:
danh sách in
Câu lệnh in (một phần mở rộng) cung cấp một phương thức đầu ra khác. "Danh sách" là danh sách các chuỗi và biểu thức được phân tách bằng dấu phẩy. Mỗi chuỗi hoặc biểu thức được in theo thứ tự của danh sách. Không có dòng mới kết thúc được in. Biểu thức được ước tính và giá trị của chúng được in và gán cho biến cuối cùng. Các chuỗi trong câu lệnh in được in ra đầu ra và có thể chứa các ký tự đặc biệt. Các ký tự đặc biệt bắt đầu bằng ký tự dấu gạch chéo ngược (\). Các ký tự đặc biệt được bc nhận ra là "a" (cảnh báo hoặc chuông), "b" (backspace), "f" (thức ăn mẫu), "n" (dòng mới), "r" (trả lại xe), "q" ( trích dẫn kép), "t" (tab) và "\" (dấu gạch chéo ngược). Bất kỳ ký tự nào khác sau dấu gạch chéo ngược sẽ bị bỏ qua.