【发布时间】:2014-12-26 20:03:36
【问题描述】:
我有一个带有以下行的 bash 脚本。变量start_time 和start_files[$i] 是浮点数。我想使用命令bc 比较它们,如下所示:
result1=$(bc -l <<< $start_time'>='${start_files[$i]})
当我运行脚本时,我总是收到以下错误。
(standard_in) 1: syntax error
我已经检查过这个错误是由这一行引起的。我究竟做错了什么?我在使用 bash 4.1 时发生这种情况,而 bash 4.3 运行良好。但是我需要使用 bash 4.1 运行脚本。
bc 命令有效,但输入无效。使用此命令从文件中读取变量start_files
IFS=, read -r -a start_files <<< $(head -n 1 file.txt)
基本上我想从第一行读取所有值,用逗号分隔并将它们存储到数组的不同位置。然而,使用 bash 4.1,所有值最终都存储在 start_files[0] 中。我该如何解决这个问题?此行适用于 bash 4.3
【问题讨论】:
-
这些变量的值是多少?
-
浮点值,如 9.5、4.2、34.5678 等
-
使用
bash -x script调试脚本时看到了什么?它通常有助于告诉您哪里出了问题。但是,它不会打印 here 字符串,因此您必须修改脚本以执行echo "bc -l <<< $start_time >= ${start_files[$i]}"或类似的操作,以准确反映将要执行的内容,以便查看bc抱怨的输入。在解决语法错误问题时,首先需要看到的是被投诉的语法。 -
抱歉,我无法使用 bash 版本 4.1.2 (RHEL 6) 重现该错误:
start_time=9.5; i=4; start_files[$i]=4.2; result1=$(bc -l <<< $start_time'>='${start_files[$i]}); echo $result1 -
@KoTy,检查 specific 值是否真的是你认为的那样——一个错误导致其中一个为空,f'rinstance,很可能这个错误的原因。在运行
bc之前立即回显它们;如果不这样做,因为这是bc语法错误而不是 bash 语法错误,这意味着我们根本没有足够的信息来提供帮助。