Lưu trữ 2 ^ 500 trong một biến trong bash


7

Tôi muốn lưu trữ giá trị 2 ^ 500 trong biến DELTA.

tôi đang làm

export DELTA=$(echo "scale=2; 2^500" | bc)

nhưng điều này không được đặt DELTAthành 3273390607896141870013189696827599152216642046043064789483291368096133796404674554883270092325904157150886684127560071009217256545885393053328527589376. Thay vào đó, nó đặt nó thành

32733906078961418700131896968275991522166420460430647894832913680961\
33796404674554883270092325904157150886684127560071009217256545885393\
053328527589376

Tôi đã thử các câu trả lời trong câu hỏi này (3 tuổi), bằng cách sử dụng

export DELTA=$(echo "scale=2; 2^500" | bc | tr '\n' ' ') 

hoặc là

export DELTA=$(echo "scale=2; print 2^500" | bc | tr '\n' ' ')

nhưng không ai trong số họ làm việc để thiết lập biến, chỉ để lặp lại nó. Bất kỳ ý tưởng?


hãy thử thiết lập BC_LINE_LENGTHnhư Stephane trong câu trả lời này: unix.stackexchange.com/a/176966/70524
muru

5
Bạn đã có câu trả lời, tôi chỉ muốn thêm rằng bạn không cần echolệnh. Thay vào đó, hãy sử dụng chuyển hướng Here String :bc <<< "scale=2; 2^500"
jimmij

@jimmij Một điều; đi echođường là dễ di chuyển hơn nhiều (nghĩ thương mại * nixes). Thêm vào đó, bạn phải đảm bảo rằng bạn /tmpthể ghi được nếu bạn sử dụng chuỗi ở đây. Hãy suy nghĩ về console khẩn cấp với /gắn ro - đây chuỗi cách tiếp cận của bạn sẽ thất bại.
cú pháp

Câu trả lời:


12
echo "scale=2; 2^500" | bc | tr -d '\n\\'

Đầu ra:

3273390607896141870013189696827599152216642046043064789483291368096133796404674554883270092325904157150886684127560071009217256545885393053328527589376

1
Tôi mặc dù tr đó chỉ làm việc với một char mỗi lần? oO
Gilles Quenot

@StardustOne Không hẳn. Bạn có thể sử dụng các nhóm ký tự tùy ý với hai tham số, ví dụ: thử echo "havk vf sha" | tr 'fhaskv' 'sunfxi':) (đây là rot13 cho người nghèo, với các ký tự được cố tình hủy bỏ để không đưa ra giải pháp quá sớm :))
cú pháp từ

14

Trong triển khai GNU bc, có biến môi trường BC_LINE_LENGTH(cf man bc):

~$ echo "scale=2; 2^500" | bc
32733906078961418700131896968275991522166420460430647894832913680961\
33796404674554883270092325904157150886684127560071009217256545885393\
053328527589376
~$ export BC_LINE_LENGTH=99999 #or better 0
~$ echo "scale=2; 2^500" | bc
3273390607896141870013189696827599152216642046043064789483291368096133796404674554883270092325904157150886684127560071009217256545885393053328527589376

1
Tôi thích giải pháp này nhất, ngoại trừ việc BC_LINE_LENGTH=0nó không hoạt động trong máy của tôi (Mac OS X) và tôi đang sử dụng những con số thực sự lớn, vì vậy việc thay đổi BC_LINE_LENGTHtùy thuộc vào số đó là không đủ đối với tôi. +1 trong mọi trường hợp.
Jorge Leitao

3

Suy nghĩ sáng tạo:

export DELTA=$(python -c 'print(2**500)')

2
> echo "scale=2; 2^500" | bc | { read value; echo "$value";}
3273390607896141870013189696827599152216642046043064789483291368096133796404674554883270092325904157150886684127560071009217256545885393053328527589376

1
$ echo "scale=2; 2^500" | bc | perl -pe 's/\\\n//'
3273390607896141870013189696827599152216642046043064789483291368096133796404674554883270092325904157150886684127560071009217256545885393053328527589376
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.