分岐せずにPrintf形式のZSH変数を使用しますか?

分岐せずにPrintf形式のZSH変数を使用しますか?

私のpowerlevel10kカスタムプロンプトの場合、現在のエポック以降の秒をカンマで区切って表示するこの機能があります。現在の時間の下に表示されるので、常に現在のエポック時間が何であるかをほぼ覚えていることを知らせる通知があります。

function prompt_epoch() {
  MYEPOCH=$(/bin/date +%s | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta')
  p10k segment -f 66 -t ${MYEPOCH}
}

私のプロンプトは次のとおりです。 ヒントの例のスクリーンショット

次のコマンドを使用すると、プロセスをフォークせずにこれを行うことができると言われました。

$ zmodload -F zsh/datetime p:EPOCHSECONDS
$ printf "%'d" $EPOCHSECONDS
1,648,943,504

しかし、分割せずにこれを行う方法はわかりません。私はpowerlevel10kを取得する前にその行を追加する方法を知っていますが、zmodloadフォークなしでフォーマットする方法がわかりません。~/.zshrc${EPOCHSECONDS}

私が知っているようにしたら、次のようにしたでしょう。

function prompt_epoch() {
  MYEPOCH=$(printf "%'d" ${EPOCHSECONDS})
  p10k segment -f 66 -t ${MYEPOCH}
}

しかし、私が知っているのは、プロンプトが呼び出されるたびにプロセスが分岐し続けるということです。そうですか?フォークが必要なプロセスを実行しないと、最新のエポック秒を取得する方法が見つからないと思うので、与えられたアドバイスを誤解しているのでしょうか?

ベストアンサー1

printfのユーティリティには、「変数として印刷」するオプションがあります。bashzsh-v

printf -v MYEPOCH "%'d" ${EPOCHSECONDS}

上記のコマンドの実際の結果は、現在のロケールによって異なります。

おすすめ記事