我想在文件名中添加日期和时间,例如:08032016out.log.zip
这就是我尝试做的:
_now=$(date +"%m_%d_%Y")
_file="$_nowout.log"
touch $_file.txt # creating new file with the timedate
如何使用日期时间创建新文件?
答案1
您创建了一个名为 的变量_now
,但后来引用了一个名为 的变量_nowout
。为避免此类问题,请使用花括号分隔变量名:
_now=$(date +"%m_%d_%Y")
_file="${_now}out.log"
touch "$_file.txt"
请注意,我保持"$_file.txt"
原样,因为.
已经是变量名称分隔符。当有疑问时,"${_file}.txt"
也可以使用。
奖励1:${varname}
语法实际上提供了几个有用的字符串操作除了分隔之外,还对变量进行限制。
好处 2:创造性的 shell 转义和引用也可用于分隔变量名称。您可以分别引用变量和字符串文字(即file="$_now""out.log"
或file="$_now"'out.log'
)或将其中一个部分不加引号(即file=$_now"out.log"
或file="$_now"out.log
)。最后,您可以转义变量名称后面的单个字符:file=$_now\out.log
。不过,如果没有很好地理解 shell 引用和转义规则,我不建议重复使用这些示例。
答案2
您需要指定变量名称的边界。
_file
将被设置为$_nowout.log
,但 shell 无法确定您的意思是$_now
或$_nowout
。
使用
_file="${_now}out.log"
显式使用该$_now
变量。
所以脚本变成:
_now=$(date +"%m_%d_%Y")
_file="${_now}out.log"
touch "${_file}.txt"
根据记录,其中可以缩短为:
touch "$(date +%m_%d_%Y)out.txt"