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