语法错误:无效的算术运算符(错误标记为“.00>0”)

语法错误:无效的算术运算符(错误标记为“.00>0”)

使用 ubntu 18.04 我的 bash 脚本返回以下错误:

语法错误:无效的算术运算符(错误标记为“.00>0”)

我的代码如下:

echo Enter the number of images to be exported per folder!
read imperfol  

echo Enter the path where the timestamp file is located!
read path_ts

num_images=$(< $path_ts wc -l)

num_folders=$(echo "scale=2 ; $num_images/ $imperfol" | bc)

if (($num_folders>0))
then
    echo control 1
fi

我的意图是,我需要检查 if 语句中是否为“num_folder>0”。并且会有以下语句“num_folder>1”、“num_folder>2”等。

非常重要的一点是 num_folder 并不总是一个整数。

答案1

错误是因为使用 时scale=2bc命令输出的浮点值类似于1.00bash 1 shell 算术表达式((...))无法处理的值。

$ num_folders=$(echo "scale=2 ; 1.0 / 1.0" | bc)
$ echo $num_folders
1.00
$ (($num_folders>0)) && echo Greater
-bash: ((: 1.00>0: syntax error: invalid arithmetic operator (error token is ".00>0")

然而

$ num_folders=$(echo "scale=0 ; 1.0 / 1.0" | bc)
$ echo $num_folders
1
$ (($num_folders>0)) && echo Greater
Greater

请注意,在内部,((...))您可以仅通过名称引用变量,而无需取消引用$,因此((num_folders>0))也可以。还请注意,在 ((...)) 内部,<and>运算符确实是算术比较 - 而不是词汇比较,因为它们在“方括号”测试括号内。

您应该做什么取决于您的代码的意图 - 您可以在任何地方使用整数算术 - 如果这不是一个选项,那么就自己进行比较bc

$ echo "scale=2; (1.5 / 1.0) > 1" | bc
1
$ echo "scale=2; (0.5 / 1.0) > 1" | bc
0

并在您的(整数)shell 测试中使用结果。


1其他 shell,特别是 ksh93 和 zsh,处理浮点运算。

相关内容