Bash 到bc的管道给出了不一致的语法错误
我必须通过管道将整数比较(以及更复杂的算术和布尔运算)传递到bc,并且当某些数据丢失时,我必须跟踪语法错误 似乎我发现了一些与bc不一致的行为 当然:Bash 到bc的管道给出了不一致的语法错误,bash,pipe,bc,Bash,Pipe,Bc,我必须通过管道将整数比较(以及更复杂的算术和布尔运算)传递到bc,并且当某些数据丢失时,我必须跟踪语法错误 似乎我发现了一些与bc不一致的行为 当然: echo“1==7”| bc给出布尔值0 echo“==7”| bc给出了(标准)1:语法错误 但是: 第二行不是7,而是(标准)2:语法错误 为了这些解释,我简化了bc的输入,但我必须用更复杂的算术和布尔运算来解决这种奇怪的行为 变通办法 正如@KamilCok在下面注意到的,一个解决方法是插入换行符 echo-e“==1\n==7”| awk
echo“1==7”| bc
给出布尔值0
echo“==7”| bc
给出了(标准)1:语法错误
但是:
第二行不是7
,而是(标准)2:语法错误
为了这些解释,我简化了bc
的输入,但我必须用更复杂的算术和布尔运算来解决这种奇怪的行为
变通办法
正如@KamilCok在下面注意到的,一个解决方法是插入换行符
echo-e“==1\n==7”| awk'ORS=“\n\n”| bc
不,这与键盘输入完全一致
我怀疑bc
有一个奇怪的解析错误行为,仅此而已。我认为这是GNU bc中yacc解析器中的一个错误。我发现在比较之间插入一个有效语句似乎可以重置状态
echo -e "==1\n1\n==7" | bc
(standard_in) 1: syntax error
1
(standard_in) 3: syntax error
因此,解决方法是在比较之间输入一个空的有效语句(就像1
)。真正的解决方案是为GNUbc
编写一个补丁,并通知开发人员。我闻到一个bug。你应该写信给bc
开发者。有趣的事实:尝试==1\n======================================7
。我猜yacc解析器是混乱的。@KamilCuk对我来说,这给出了相同的输出hanx<代码>echo-e“==1\n==7”| awk'ORS=“\n\n”| bc
是一种解决方法。我不知道如何写补丁,但我通知了开发人员。
echo -e "==1\n1\n==7" | bc
(standard_in) 1: syntax error
1
(standard_in) 3: syntax error