bash脚本昨天的zip文件

时间:2012-01-06 01:51:39

标签: 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调用并自动下载文件

2 个答案:

答案 0 :(得分:3)

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

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

你的命令正在做的是在运行yesterday命令期间将date设置为空字符串,这是一个漂亮的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'在这种情况下并不是必需的,所以我也删除了它。

答案 1 :(得分:1)

使用${}来逃避:

remote_file="76.99.20.129\\${yesterday}.zip"