在if条件下比较两个十进制数时,我得到以下错误
./www.example.com:第8行:((:cpu.shbc:表达式中的语法错误(错误标记为"1.0公元前")| bc : syntax error in expression (error token is "1.0 | bc ")
./www.example.com:第8行:((:cpu.shbc:表达式中的语法错误(错误标记为"1.0公元前")| bc : syntax error in expression (error token is "1.0 | bc ")
./www.example.com:第8行:((:cpu.shbc:表达式中的语法错误(错误标记为"1.0公元前")| bc : syntax error in expression (error token is "1.0 | bc ")
./www.example.com:第8行:((:cpu.shbc:语法错误:算术运算符无效(错误标记为".0-〉1.0|公元前") invalid arithmetic operator (error token is ".0 -gt 1.0 | bc ")
#!/bin/bash
val1=$*
for i in $val1
do
if (( $i -gt 1.0 | bc ))
then
echo $i
fi
done
3条答案
按热度按时间inkz8wg91#
(( ... ))
需要算术表达式。它不处理-gt
,并且|
表示 * 按位或 *,而不是管道。算术表达式无法在bash中处理小数,使用
bc
是解决方案之一,但不能这样和(( ... ))
合并,需要bc
的输出,所以使用命令替换,bc
不理解-gt
,它使用传统的<
和>
来比较数字。8qgya5xd2#
请注意,使用大于号时(-gt)在if语句中比较数值大小,两个操作数都应该是数值,否则比较结果可能不符合预期。在本例中,当i的值为1.1时,您应该能够输出该值,但实际上此代码无法输出任何内容,因为使用大于号比较字符串不是数值比较,并且应该使用双括号或bc之类的命令来执行数值计算。
还需要注意的是,在for循环中使用“$@”迭代所有参数,可以确保正确处理每个参数,即使它包含空格等特殊字符。
rqmkfv5c3#
你可以试试下面的代码:
剥壳
结果是: