管道到 bc 给出不一致的语法错误
Pipe to bc gives inconsistent syntax errors
我必须将整数比较(以及更复杂的算术和布尔运算)传递给 bc,并且我必须在某些数据丢失时跟踪语法错误。
我似乎发现了一些与 bc 不一致的行为。
当然 :
echo "1==7" | bc
给出布尔值 0
echo "==7" | bc
给出 (standard_in) 1: syntax error
但是:
echo -e "==1\n==7" | bc
(standard_in) 1: syntax error`
7
而不是 7
,人们会期望第二行出现 (standard_in) 2: syntax error
。
为了这些解释,我简化了 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
)。真正的解决方案是为 GNU bc
编写补丁并通知开发人员。
我必须将整数比较(以及更复杂的算术和布尔运算)传递给 bc,并且我必须在某些数据丢失时跟踪语法错误。
我似乎发现了一些与 bc 不一致的行为。
当然 :
echo "1==7" | bc
给出布尔值 0
echo "==7" | bc
给出 (standard_in) 1: syntax error
但是:
echo -e "==1\n==7" | bc
(standard_in) 1: syntax error`
7
而不是 7
,人们会期望第二行出现 (standard_in) 2: syntax error
。
为了这些解释,我简化了 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
)。真正的解决方案是为 GNU bc
编写补丁并通知开发人员。