4

私が抱えている同様の問題に関連しています: zsh not re-computing my shell prompt

呼び出されるたびに値が計算されるようにシェル変数を定義する方法はありますか?

たとえば、次のようにします。

my_date="today is $(date)"

my_date の値は次のようになります。today is Thu Aug 9 08:06:18 PDT 2012

しかし、 my_date が使用されるたびに日付が実行されるようにします。リンクされた投稿では、誰かが値を一重引用符で囲むことを推奨しています。

my_date='today is $(date)'

しかし、何も評価することはなく、文字通り $(date) にとどまります。

私はzsh 5.0.0を使用しています

4

2 に答える 2

6

それは可能ではありません。代わりに関数を使用してください:

my_date() {
    echo "today is $(date)"
}

# use it
echo "$(my_date)"

注:これはbash構文です。シェルはわずかに異なる構文を使用する場合があります。

于 2012-08-09T15:29:06.287 に答える
6

最初のケースで PS1 について言っておくべきでした: プロンプト展開は変数展開と比較して非常に異なります。一重引用符を使用する必要があると言ったガイPS1='$(command)'は正しかったが、彼は1つのポイントを逃していた.あなたはしなければならない.

setopt promptsubst

プロンプトでコマンド置換を有効にします(および他のいくつかの置換も同様に)。

PS1 を設定する前または後に設定するかどうかは関係ありません。プロンプトを表示する前に発生する必要があります。オプションは、PS1 が実際のプロンプトに展開されるたびにチェックされます。

非プロンプト変数の場合、@Aaron Digullaは、後続の評価で値を変更する可能性のある変数を使用できないことについて完全に正しいです。しかし、zsh では、さらに 2 つのことを行うことができます: モジュールを記述し (C で!) ${(%%)VAR}、指定された変数でプロンプト展開を行うものを使用します (注: promptsubst と他の 2 つのプロンプト* オプションを尊重します)。より便利な${(...)}展開フラグがあります。

于 2012-08-09T16:50:21.183 に答える