Bash脚本采购配置文件但不能在算术中使用vars

时间:2016-04-07 23:16:55

标签: bash math config

这是在扼杀我。我有一个配置文件“myconfig.cfg”,其中包含以下内容:

SOME_VAR=2
echo "I LOVE THIS"

然后我有一个我正在尝试运行的脚本,它来源配置文件以便将其中的设置用作变量。我可以将它们打印出来,但是当我尝试将一个放入数字变量以用于类似“seq”命令时,我会得到这个奇怪的“无效算术运算符”错误。 这是脚本:

#!/bin/bash

source ./myconfig.cfg
echo "SOME_VAR=${SOME_VAR}"
let someVarNum=${SOME_VAR}
echo "someVarNum=${someVarNum}"

这是输出:

I LOVE THIS
SOME_VAR=2
")syntax error: invalid arithmetic operator (error token is "
someVarNum=

我尝试了无数的理论上不应该有所作为的东西,而且,他们却没有。我根本想不出来。如果我只是将“SOME_VAR = 2”行直接放入脚本中,一切都很好。我猜我必须逐行读取配置文件,用“=”拆分字符串,然后找到+创建我想手动使用的变量。

1 个答案:

答案 0 :(得分:1)

错误正如@TomFenech的评论所示。 myconfig.cfg中的第一行(可能是所有行)以Windows CR-LF行结尾终止。 Bash认为CR是普通字符(不是空格),因此它会将SOME_VAR设置为两个字符串 2 CR 。 (CR是十六进制代码为0x0D的字符。如果使用十六进制转储程序显示文件,则可以看到:hd myconfig.cfg。)

let命令对数字执行算术运算。它还认为CR是普通字符,但它既不是数字也不是运算符,因此它会抱怨。不幸的是,它没有尝试消除错误消息中字符的显示,因此在两个"符号之间显示回车符。因此,错误消息的结尾将覆盖开头。

不要使用Windows文本编辑器创建Unix文件。或者使用dos2unix之类的实用程序在将它们复制到Unix机器后修复它们。