ファイル名を使用してファイルのスナップショットを作成することがよくあります。date +%Y%m%D
.tar.gz ファイル名に日付が挿入されますが、面倒な場合があります。
date +%Y%m%D
filename$DATEMACRO.gz を使用できるように、常に展開されるマクロに式を設定する方法はありますか。
そのようなものを環境変数などとして設定できますか?
それは多くのエラーを救うでしょう。
現在の日付を取得する関数を作成する必要があります。
#!/bin/bash
DATEMACRO() {
date +%Y%m%D
}
echo "myfile_$(DATEMACRO)"
私が考えることができる最も近いものはシェル関数です:
# With optional support for a date other than today
DATEMACRO () {
date +%Y%m%d ${1:+--date "$*"}
}
export -f DATEMACRO
そのようなマクロをシェルから永続的に使用できるようにする.bashrc
には、環境に追加してエクスポートする必要があります。export -f DATEMACRO
できれば関数定義の直後に(上記の元の回答で修正されたように)、以下のようなコマンドをシェルから直接実行可能にします
cp foo filename$(DATEMACRO).gz
cp bar filename$(DATEMACRO -3 weeks).gz
bash で動的変数を持つ方法はありません。ただし、bash は、ksh によって最初に導入されたいくつかのイノベーションを借用しているため、ksh93 が提供するいわゆる規律機能をいつか実装する可能性があります。例えば:
#!/bin/ksh93
function DATEMACRO.get
{
DATEMACRO=$(date +%Y%m%D)
}
$ echo filename$DATEMACRO.gz
filename20120825.gz
ksh93 には、浮動小数点演算、FPATH、コプロセスなど、bash にはないいくつかの便利なスクリプト機能があり、さらに論理的な方法でパイプラインを実装しているため、bash の代替と見なされる可能性があります。
次のことができます。
cienas > 23:24 ~ > export D="date +%Y-%m-%d-%H-%M-%S.tar.gz"
cienas > 23:24 ~ > echo `$D`
2012-08-24-23-25-02.tar.gz
cienas > 23:25 ~ > cp .profile `$D`
動作することを確認するためだけにタイムスタンプを追加しました。D を .basrc ファイルにエクスポートすると$D
、現在の日付と時刻を取得するために使用できます。$D を囲むこれらの引用符は、チルダ キーのものであることに注意してください。