我刚刚发现将stdout传输到Perl中,我很惊讶你甚至可以这样做:
[user@folder] $ echo print 1/3 | perl 0.33333[user@folder] $
根据我的理解,你将print命令放入Perl,并使用Perl的代码进行浮点计算.请指正.但是,每次我这样做,我都会得到一个没有换行符的答案.我到处搜索,我只是不能将这些术语的关键字足以创建答案.
这是我正在谈论的内容的链接,在海报旁边 Thor: 我如何在bash中使用浮点除法?
他给出了一个惊人的答案,但我无法评论或给用户发消息,所以我决定在这里创建一个新问题.
我仍然试图围绕这是如何工作,变量.
$ three=3 $ echo $three/3 | perl 1[user@folder] $
奖金问题:
它起初就像我试图让bash在算术运算中输出浮点数.我不明白为什么bc
不能返回浮动.据说它可以,但它对我不起作用.
理想的情况是:
$ echo 1/3 | bc 0 $
应该返回.333而不是0.我正在委托一个工具bc
,并且bc
应该能够做浮动.我只是不明白发生了什么.
使用-l
选项(请参阅perldoc perlrun
):
$ echo print 1/3 | perl -l 0.333333333333333 $
它会自动添加换行符.文件说:
-l[octnum]
启用自动行结束处理.它有两个独立的效果.首先,
$/
当与-n
或一起使用时,它会自动选择(输入记录分隔符)-p
.其次,它指定$\
(输出记录分隔符)具有octnum的值,以便任何print语句都将重新添加该分隔符.如果省略octnum,则设置$\
为当前值$/
.例如,要将线条修剪为80列:perl -lpe 'substr($_, 80) = ""'请注意,分配
$\ = $/
是在处理交换机时完成的,因此如果-l
交换机后跟交换机,则输入记录分隔符可能与输出记录分隔符不同-0
:gnufind / -print0 | perl -ln0e 'print "found $_" if -p'这将设置
$\
为换行符,然后设置$/
为空字符.
shell扩展了shell变量,所以不应该对此感到惊讶:
$ three=3 $ echo print $three/3 | perl -l 1 $ echo print $three/3 print 3/3 $
对于你的奖金问题:
$ echo 1/3 | bc -l .33333333333333333333 $
纯粹的侥幸是-l
再次选择.这一次,它意味着'加载库',巧合地设置scale
为20,这就是显示20个十进制数字的原因.
顺便说一句,快速获取π到大量小数位的方法是:
$ echo '4*a(1)' | bc -l 3.14159265358979323844 $ echo 'scale=40; 4*a(1)' | bc -l 3.1415926535897932384626433832795028841968 $
功能a
,通过从库加载-l
选项,是"反正切".我观察到来自Google搜索"pi 40位"的至少3个来源表明它应该是:3.1415926535 8979323846 2643383279 5028841971 - 这表明在第40个数字中存在3个计数的错误bc
.