") 语法错误 算术运算符无效(错误标记为 "

") 语法错误 算术运算符无效(错误标记为 "

我在脚本中使用命令bash从源文本文件获取数据,然后将变量的值添加到其中并在 if/else 条件中使用它。

源数据文件(db_count.ini)(注:双引号内有一个空格):

db_ctdy_sr=" 7"

脚本:

source db_count.ini

# Removing the whitespace on the stored data
n_db_sr=${db_ctdy_sr// /}

# Sum
c=0
b=7

echo "Value of db:"$n_db_sr

sm=$((n_db_sr + c))

echo "The value of db:"
echo "$sm" 
echo $sm 

if [ "$sm" = "$b" ]
then
   echo "Success."
else
   echo "Not."
fi

echo "Bye!"

但是当我运行脚本时它总是这样

The value of db:7
") Syntax error Invalid arithmetic operator (error token is "
The value of:


Not.
Bye!

有小费吗?有什么建议么?

谢谢!

答案1

你的脚本在这里运行。使其产生与您报告的相同错误的唯一方法是使变量db_ctdy_sr包含new line

添加新行:

source db_count.ini
db_ctdy_sr=$' 7\r'

然后测试脚本:

$ ./so

Value of db:7
")syntax error: invalid arithmetic operator (error token is "
The value of db:
 //test if working
//test if working
Not.
Bye!

如果文件db_count.ini包含 DOS 回车符,则可能会发生这种情况。

执行:

$ sed -n l db_count.ini
db_ctdy_sr= 7\r$

(或类似)以查看\r文件中的 。

通过编辑文件并删除失败的字符或更改此行来删除回车符:

n_db_sr=${db_ctdy_sr// /}

到:

n_db_sr=${db_ctdy_sr//[ $'\r'}]}

或者,更一般地删除所有控制字符:

n_db_sr=${db_ctdy_sr//[ $'\001'-$'\037']}

为了确保整理顺序不会将 ascii 值的预期顺序从 1(八进制 001)修改为 31(八进制 037),请设置 bash 变量:

shopt -s globasciiranges

自 bash 版本 4.3 起可用。

相关内容