date
コマンドを次のような素敵なフォーマットで作成したいと思います。
_$ date +"%Y-%m-%d %H:%M:%S"
2015-09-17 16:51:58
_
しかし、これを変数に保存したいので、次のようなスクリプトから呼び出すことができます: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.
_
これを行う正しい方法は何ですか?そのため、日付コマンドは正しい引数を1つ取得しますか?
あなたの例が失敗する理由は、シェルのワード分割が機能する方法のためです。 "$($Nice_date)"
を実行すると、シェルはdate
コマンドを"+%Y-%m-%d"
と"%H:%M:%S"
の2つの引数で実行します。日付のフォーマット文字列は単一の引数でなければならないため、これは失敗します。
これを行う最善の方法は、コマンドを変数に格納する代わりに関数を使用することです。
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"
コマンドを変数に保存したい場合は、配列を使用できます。
Nice_date=(date "+%Y-%m-%d %H:%M:%S")
# again echo not needed
"${Nice_date[@]}" "2015-09-17 16:51:58"
コマンドを変数に格納する複雑なケースの詳細については、 BashFAQ 05 を参照してください。
機能が最善の方法であることに同意します。別の方法として、コマンド全体ではなく変数としてフォーマットを格納するだけです。
$ Nice_date='+%Y-%m-%d %H:%M:%S'
$ echo "$(date "$Nice_date") [WARNING] etc etc"
簡単な方法の1つは、\でスペースを「エスケープ」することです。
Nice_date="date +%Y-%m-%d\ %H:%M:%S"
最短の答えは
#if you want to store in a variable
now=$(date '+%F" "%T');
echo $now
#or direct output (single quote may not needed)
date '+%F" "%T'
の代わりに:
Nice_date="date +%Y-%m-%d %H:%M:%S"
echo "$($Nice_date)"
試してください:
Nice_date_format="+%Y-%m-%d %H:%M:%S"
echo $(date "$Nice_date_format")
また、最後のコマンド置換は必要ありません。
date "$Nice_date_format"
以下をお試しください:
記号「 `」をキーボードのチルダキーにある記号を追加する必要があります。シンボルは、シェルが最初にコマンドを実行してから変数に割り当てることを示しています。
[root@RHEL01 ~]# My_Var=`date +"%Y-%m-%d %H:%M:%S"`
[root@RHEL01 ~]# echo $My_Var
2015-09-17 10:05:30
[root@RHEL01 ~]#