Nhận GNU bc để in một ký tự dòng mới


1

GNU bc rất độc đáo. Tôi không thể tìm thấy bất cứ điều gì trực tuyến về cách làm cho nó in một ký tự dòng mới. Tôi đang cố gắng để nó in 16 chữ số thập lục phân đầu tiên của các số nguyên từ 1 đến 30. Tôi mong muốn một cái gì đó như thế này sẽ hoạt động:

define mod(x, y) {
    oldscale=scale;
    scale=0;
    result=x%y;
    scale=oldscale;
    return result;
}
obase=16;
x=1;
while (x <= 30) {
    X=2^64*mod(s(x),1)-mod((2^64*mod(s(x),1)),1);
    print X"\n";
    x=x+1;
}

Nhưng nó không.

Câu trả lời:


1

Chỉ tìm thấy một vấn đề khác có thể xảy ra: nếu bạn đang sử dụng Xký 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 printtrong bclà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 \nbả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 để bcsử 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 \nthấ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 \ns 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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.