gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:34:33 29 4
gpt4 key购买 nike

在尝试编写一个简单的 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 有助于避免更多类似问题。

最佳答案

您的错误消息似乎表明 CR 污染了您的数据。

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

注意本应在当前行尾之后的内容如何出现在行首。这很可能是因为您的错误标记实际上是一个 CR(这是一个回车符 - 一个指示终端将光标放在行首的字符)。这些字符几乎仅由 Windows 机器使用,它们是行尾的一部分。

我假设您正在使用 Windows 机器,并且您的“date”命令给出的输出后跟一个“windows”换行符,这实际上是一个\r\n(回车,换行符)。 $() 总是去除尾随的换行符,这会在末尾留下\r,导致脚本中出现解析问题。

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

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

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

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

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

关于Bash:如何在算术表达式中进行变量扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/673016/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com