linux - bash 脚本昨天的 zip 文件

标签 linux bash scripting

#!/bin/bash

yesterday= date --date="1 day ago" +%Y%m%d | tr -d '\n'
remote_file="76.99.20.129\$yesterday.zip"

echo $remote_file

输出:

2012010476.99.20.129$yesterday.zip

这是怎么回事?

我想将此变量传递给 wget 调用并自动下载文件

最佳答案

这里有两个问题。首先是您实际上没有在变量中捕获 date 命令的输出:

pax> yesterday= date --date="1 day ago" +%Y%m%d | tr -d '\n'
20120105pax@pax-desktop:~$ echo $yesterday
<<no output>>

你的命令正在做的是在运行 date 命令期间将 yesterday 设置为一个空字符串,一个漂亮的 bash我称之为一次性环境设置的功能,但 bash 几乎肯定会调用其他东西。这与:

xyzzy=plugh dosomething

其中 dosomething 命令在其环境中有一个用于 xyzzy 的条目,但在返回时,启动它的 shell 没有。请注意,这不同于:

export xyzzy=plugh
dosomething
# Here xyzzy is still set.

第二个是您要转义 $,这意味着变量不会被触及。

尝试:

pax> yesterday=$(date --date="1 day ago" +%Y%m%d)
pax> remote_file="76.99.20.129_${yesterday}.zip"
pax> echo ${remote_file}
76.99.20.129_20120105.zip

我加下划线只是为了让你能清楚地看到轮廓。删除它以获得您最初想要的行为(我认为)。

如果您实际使用的字符串中应该包含反斜杠,您需要对其进行转义,这样它就不会影响 $:

pax> yesterday=$(date --date="1 day ago" +%Y%m%d)
pax> remote_file="76.99.20.129\\${yesterday}.zip"
pax> echo ${remote_file}
76.99.20.129\20120105.zip

注意上面的double \来实现转义。

您还会注意到我用 {} 包围了环境变量名称。这是一种很好的做法,可以避免在您要将字母 d 添加到环境变量 abc 的内容时出现问题。

命令 echo $abcd 将为您提供 abcd 环境变量的内容,而您需要的是 echo ${abc}d .我总是喜欢这种明确的表示法。

此外,感谢 holygeek,在这种情况下 tr -d '\n' 并不是必需的,所以我也将其删除。

关于linux - bash 脚本昨天的 zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8752476/

相关文章:

java - 在 Linux 上构建 JSCIPOpt(Scip 的 Java 接口(interface))

c - 为什么在未设置 DBUS_SESSION_BUS_ADDRESS 时 g_file_copy 返回 Operation not supported

Linux进程和线程调度

linux - 脚本创建父目录的 tar,该目录将具有其子目录的单独 tar

Windows 使用代理从 URL 批量下载文件

c++ - Qt Creator 找不到 openCV 库

php - 如何进行非阻塞 php exec 调用?

bash - supervisord 停止子进程

javascript - 任何允许 Javascript 作为脚本语言的好文本编辑器?

java - 如果我将某个类的对象绑定(bind)到脚本引擎,如何从脚本引擎中将其作为该类的对象进行访问?