Dc
dc print 怎麼會拆分長號
執行該
dc
實用程序時,如果我輸入一個非常大的數字,請說:999999999999999999999999999999999999999999999999999999999999999999999999
當我使用 列印出來時
p
,我得到:999999999999999999999999999999999999999999999999999999999999999999999\ 999
為什麼它會在 69 位後拆分輸出?
至少對於 的 GNU 實現
dc
,有DEFAULT_LINE_MAX
70 個字元的硬編碼 - 儘管可以通過設置DC_LINE_LENGTH
環境變數來覆蓋它。來自dc/numeric.c
:559 static int out_col = 0; 560 static int line_max = -1; /* negative means "need to check environment" */ 561 #define DEFAULT_LINE_MAX 70 562 563 static void 564 set_line_max_from_environment(void) 565 { 566 const char *env_line_len = getenv("DC_LINE_LENGTH"); 567 line_max = DEFAULT_LINE_MAX; 568 errno = 0; 569 if (env_line_len) { 570 char *endptr; 571 long proposed_line_len = strtol(env_line_len, &endptr, 0); 572 line_max = (int)proposed_line_len; 573 574 /* silently enforce sanity */ 575 while (isspace(*endptr)) 576 ++endptr; 577 if (*endptr || errno || line_max != proposed_line_len 578 || line_max < 0 || line_max == 1) 579 line_max = DEFAULT_LINE_MAX; 580 } 581 } 582
所以
$ dc 999999999999999999999999999999999999999999999999999999999999999999999999 p 999999999999999999999999999999999999999999999999999999999999999999999\ 999 q
但
$ DC_LINE_LENGTH=0 dc 999999999999999999999999999999999999999999999999999999999999999999999999 p 999999999999999999999999999999999999999999999999999999999999999999999999 q $
終端傳統上是 80x24(左右),在這樣的運動場中,換行的長行可能會出現問題,這可能解釋了 Unix 傳統的換行長行並用
\
.這是一個非常古老的限制,
dc(1)
在第6 版 AT&T UNIX原始碼中包含:dc1.s:ll: 70. /line length
(復古計算方面的人可能會詳細告訴你為什麼長行是個問題;有人可能會懷疑,當時的行式列印機可能沒有神奇的換行功能,所以要正確列印一些東西,它真的會需要適合頁面…)