我在其中一个 shell 脚本中定义了一个变量来创建其中包含日期值的文件名。
我使用“date +%Y%m%d”命令插入在 date_val 变量中定义的当前日期。
我已经将文件名变量定义为“${path}/sample_${date_val}.txt
这几天它正确地创建了文件名 /programfiles/sample_20180308.txt
但今天创建的文件名没有日期 /programfiles/sample_.txt
当我尝试在 Linux 中执行命令“date +%Y%m%d”时,它返回了正确的值 - 20180309。
知道为什么创建的文件名没有日期值吗??? .我也没有修改脚本中的任何内容。所以想知道可能出了什么问题。
为了便于理解,下面给出了我的脚本的示例摘录:
已编辑
path=/programfiles
date_val=$(date +%Y%m%d )
file_name=${path}/sample_${date_val}.txt
最佳答案
虽然极不可能,但根据源代码,date
肯定可能失败。在幕后,它调用 clock_gettime()
或 gettimeofday()
,两者都可能失败。
如果这两个函数中的任何一个的日期在调用期间超出范围,date
程序也将拒绝向标准输出输出任何内容(这是可能的if 他们失败了)。
date
程序也可能由于各种原因“消失”,例如实际上被隐藏或权限更改,或者在尝试打开可执行文件时缺少文件句柄等资源。
如前所述,所有这些可能性都是一种延伸,不太可能在现实世界中发生。
如果你想处理你从 date
得到的输出不足的情况,你可以简单地尝试直到你得到一个有效的,比如(可以添加一些限制来检测它是否是从来没有任何好处):
todaysDate="$(date +%Y%m%d)"
while [[ ! $x =~ ^[0-9]{8}$ ]] ; do
sleep 1
todaysDate="$(date +%Y%m%d)"
done
# todaysDate now guaranteed to be eight digits.
关于Linux Date 有时不显示日期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49185036/