gpt4 book ai didi

linux - bash 脚本昨天的 zip 文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:41:26 25 4
gpt4 key购买 nike

#!/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/

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