这是在扼杀我。我有一个配置文件“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”行直接放入脚本中,一切都很好。我猜我必须逐行读取配置文件,用“=”拆分字符串,然后找到+创建我想手动使用的变量。
答案 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机器后修复它们。