当前位置:  开发笔记 > 编程语言 > 正文

Bash:如何在算术表达式中进行变量扩展?

如何解决《Bash:如何在算术表达式中进行变量扩展?》经验,为你挑选了1个好方法。

在尝试编写一个简单的bash脚本来帮助我的部署过程时,我遇到了一个令人困惑的错误:

#!/bin/bash
WEEKDAY=$(date +'%u')
echo $WEEKDAY
DAYS_TO_WEDNESDAY=$((3-$WEEKDAY))
echo $DAYS_TO_WEDNESDAY

结果是:

1
")syntax error: invalid arithmetic operator (error token is "

其中最奇怪的部分是,我可以发誓,这个剧本几天前运行得很好.

编辑(14:58):

问题不在于bash脚本,而在于通过TortoiseSVN使用SVN.通过Windows绕行将EOL标记更改为"CR LF",这导致bash中出现语法错误.设置svn:eol-style -property有助于避免进一步的类似问题.



1> lhunath..:

您的错误消息似乎表明您的数据被CR污染.

")syntax error: invalid arithmetic operator (error token is "

注意在你的线的当前结束之后应该发生的东西是如何开始的.这很可能是因为您的错误令牌实际上是CR(这是一个回车符 - 一个指示终端将光标放在行首的字符).这些字符几乎只用于Windows机器,它们是行结束的一部分.

我将假设您正在使用Windows机器,并且您的"日期"命令给出了输出,后跟"windows"换行符,实际上是\ r \n(回车符,换行符).$()总是删除尾随的换行符,最后留下\ r \n导致脚本中的解析问题.

这里,以下命令在UNIX上产生错误:

$ foo=$'5\r'; echo $((5+foo))
")syntax error: invalid arithmetic operator (error token is "

要解决此问题,您需要删除数据中的\ r \n.您可以为此使用参数扩展,或tr(1).

$ foo=$'5\r'; echo $((5+${foo//$'\r'}))
10

$ $ foo=$'5\r'; echo $((5+$(tr -d '\r' <<< "$foo")))
10

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有