回答:
bash(> = 4.2)では、外部date
(通常はGNU日付)ではなく、printfの組み込み日付フォーマッター(bashの一部)を使用することをお勧めします。
など:
# put current date as yyyy-mm-dd in $date
# -1 -> explicit current date, bash >=4.3 defaults to current time if not provided
# -2 -> start time for shell
printf -v date '%(%Y-%m-%d)T\n' -1
# put current date as yyyy-mm-dd HH:MM:SS in $date
printf -v date '%(%Y-%m-%d %H:%M:%S)T\n' -1
# to print directly remove -v flag, as such:
printf '%(%Y-%m-%d)T\n' -1
# -> current date printed to terminal
bashの場合(<4.2):
# put current date as yyyy-mm-dd in $date
date=$(date '+%Y-%m-%d')
# put current date as yyyy-mm-dd HH:MM:SS in $date
date=$(date '+%Y-%m-%d %H:%M:%S')
# print current date directly
echo $(date '+%Y-%m-%d')
他の使用可能な日付形式は、日付のmanページから表示できます(bash固有でない外部コマンドの場合)。
man date
+%F %T
はのショートカットとして使用できます+%Y-%m-%d %H:%M:%S
。ことだけメモいくつかのファイルシステム(咳** HFS)が変換されます:
に/
あなたのような文字列を与えて、2016-09-15 11/05/00
強大な混乱されているが。
date=$(date)
なくですdate=`date`
。また、プライベート変数には大文字を使用しないでください。大文字の変数名はシステム用に予約されています。
試してください: $(date +%F)
ISO 8601標準の日付形式を探しているので、GNU日付(または1988よりも新しい日付コマンド)がある場合は、次のようにします。$(date -I)
date -I
いますが、動作しませんでした。インストールされたGNUのcoreutilsのを使用して醸造(接頭辞「G」を使用しています)gdate -I
の仕事をしてくれました。
-I
GNU用に文書化されたオプションは見つかりませんが、date
確かにと同等のようdate +%F
です。
date -d '1 hour ago' '+%Y-%m-%d'
出力はになります2015-06-14
。
%
。
最近のBash(バージョン≥4.2)では、組み込みprintf
のformat修飾子を使用できます%(strftime_format)T
。
$ printf '%(%Y-%m-%d)T\n' -1 # Get YYYY-MM-DD (-1 stands for "current time")
2017-11-10
$ printf '%(%F)T\n' -1 # Synonym of the above
2017-11-10
$ printf -v date '%(%F)T' -1 # Capture as var $date
printf
は外部コマンドでありdate
ながらBashビルトインであるため、より高速ですdate
。
同様に、サブシェルをforkする必要がないのでprintf -v date ...
より高速ですdate=$(printf ...)
。
date
、余分なライブラリをロードする必要がないため、すでにbashスクリプト内から使用している場合よりも非常に高速です* 。(*私のLinuxサーバーでは、1000回の反復で約160倍の速度差を測定しました)
printf -v date
サブシェルをフォークしないことについてのコメントに+5ができたらいいのにと思います。とても良い情報!!
#!/bin/bash -e
x='2018-01-18 10:00:00'
a=$(date -d "$x")
b=$(date -d "$a 10 min" "+%Y-%m-%d %H:%M:%S")
c=$(date -d "$b 10 min" "+%Y-%m-%d %H:%M:%S")
#date -d "$a 30 min" "+%Y-%m-%d %H:%M:%S"
echo Entered Date is $x
echo Second Date is $b
echo Third Date is $c
ここで、xは使用されたサンプルの日付です。例では、データのフォーマットと現在の日付より10分多い日付の取得の両方が表示されます。