我想date
用这样的格式制作命令:
$ date +"%Y-%m-%d %H:%M:%S"
2015-09-17 16:51:58
Run Code Online (Sandbox Code Playgroud)
但我想把它保存在变量中,所以我可以像这样从脚本调用:
echo "$(nice_date) [WARNING] etc etc"
但是它不起作用
$ nice_date="date +%Y-%m-%d %H:%M:%S"
$ echo "$($nice_date)"
date: extra operand ‘%H:%M:%S’
Try 'date --help' for more information.
$ nice_date="date +\"%Y-%m-%d %H:%M:%S\""
$ echo "$($nice_date)"
date: extra operand ‘%H:%M:%S"’
Try 'date --help' for more information.
$ nice_date='date +"%Y-%m-%d %H:%M:%S"'
$ echo "$($nice_date)"
date: extra operand ‘%H:%M:%S"’
Try 'date --help' for more information.
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么,以便 date 命令获得一个正确的参数?
jor*_*anm 14
您的示例失败的原因是 shell 的分词工作方式。当您运行时"$($nice_date)"
,shell 正在执行date
带有两个参数的命令,"+%Y-%m-%d"
和"%H:%M:%S"
. 这将失败,因为日期的格式字符串必须是单个参数。
最好的方法是使用函数而不是将命令存储在变量中:
format_date() {
# echo is not needed
date "+%Y-%m-%d %H:%M:%S" "$1"
}
format_date
format_date "2015-09-17 16:51:58"
echo "$(format_date) [WARNING] etc etc"
Run Code Online (Sandbox Code Playgroud)
如果您真的想将命令存储在变量中,则可以使用数组:
nice_date=(date "+%Y-%m-%d %H:%M:%S")
# again echo not needed
"${nice_date[@]}" "2015-09-17 16:51:58"
Run Code Online (Sandbox Code Playgroud)
有关将命令存储在变量中的复杂情况的更多详细信息,请参阅BashFAQ 050。
小智 10
一种简单的方法是使用 \ 来“转义”该空间。
nice_date="date +%Y-%m-%d\ %H:%M:%S"
Run Code Online (Sandbox Code Playgroud)