[英]About Print formated Datetime in linux shell scripts
我在linux shell中鍵入:date +“%y-%m-%d%H:%M:%S”后,我得到了正確的結果,例如:14-09-26 10:47:28。
但是,當我想在shell腳本中獲取結果時,出現錯誤:“日期:非法時間格式”,為什么?
#!/bin/sh
STR='date +"%y-%m-%d %H:%M:%S"'
echo "`$STR`"
問題在於:
#!/bin/sh
STR='date +"%y-%m-%d %H:%M:%S"'
echo "`$STR`"
當在echo
命令中執行字符串時, date
命令將看到三個參數:
date
+%y-%m-%d
%H:%M:%S
它試圖將%H:%M:%S
為日期/時間,格式為:
[[[mm]dd]HH]MM[[cc]yy][.ss]]
要么:
mmddhhmm[[cc]yy]
要么:
[MMDDhhmm[[CC]YY][.ss]]
(第一個來自Mac OS X date
,第二個來自POSIX,第三個來自GNU date
)。 在這些字母中,字母對表示要設置為時間的日期的組成部分。 由於%H:%M:%S
字符串不包含數字,因此它是無效的日期格式。
您如何解決這個問題?
它部分取決於/bin/sh
是Bash,Korn Shell,Dash,Bourne Shell還是其他外殼。
除最舊的Bourne外殼外,最簡單的解決方案應能在所有外殼中使用,即創建一個函數:
dt() { date +'%Y-%m-%d %H:%M:%S'; }
然后,您可以使用:
echo "$(dt)"
優先使用$(…)
表示法而不是反引號。
注意,我拒絕使用%y
; 我記得Y2K的錯誤,即使您還太小而無法參與補救工作。
另一種技術要求支持數組(Bash,Korn shell,但不支持Dash或Bourne):
STR=( date +"%Y-%m-%d %H:%M:%S" )
echo "$( "${STR[@]}" )"
或者,更簡單地說:
"${STR[@]}"
嘗試自己執行任務。
$ #!/bin/sh
$ STR=`date +"%y-%m-%d %H:%M:%S"`
$ echo $STR
14-09-26 11:40:06
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.