我在其中一个shell脚本中定义了一个变量来创建包含日期值的文件名。
我使用"日期+%Y%m%d"用于插入date_val变量中定义的当前日期的命令。
我已经将filename变量定义为" $ {path} / sample _ $ {date_val} .txt
几天后,它正确地创建了文件名 /programfiles/sample_20180308.txt
但是今天创建的文件名没有日期 /programfiles/sample_.txt
当我尝试执行命令"日期+%Y%m%d"在linux中,它返回正确的值 - 20180309。
知道为什么没有日期值创建文件名??? 。我也没有在我的脚本中修改任何内容。所以想知道可能出了什么问题。
下面给出了我的脚本的示例摘录,以便于理解:
EDITED
path=/programfiles
date_val=$(date +%Y%m%d )
file_name=${path}/sample_${date_val}.txt
答案 0 :(得分:1)
虽然极不可能,但基于源代码,date
失败肯定可能。在幕后,它会调用clock_gettime()
或gettimeofday()
,两者都可能失败。
如果来自这两个函数中的任何一个的日期在调用期间超出范围,date
程序也将拒绝输出任何标准输出(如果 它们失败,则可能 )。
date
程序可能会消失"由于各种原因,例如实际隐藏或权限已更改,或尝试打开可执行文件时文件句柄等资源不足。
如上所述,所有这些可能性都是一个延伸,不太可能在现实世界中发生。
如果你想处理date
输出不足的情况,你可以尝试直到你得到一个有效的输出,例如(有可能增加一些限制来检测它是否有&#39}。 s 从不任何好处:
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.