zsh、分割拡張%〜

zsh、分割拡張%〜

それについて私ができることは何もありません。私はzshを使用しており、単に%3~文字拡張を分割したいと思います/。これは$(pwd)拡張とうまく機能します。$PWDどちらもパスに似た文字列です。

次のコードを使用して文字列を分割しようとしています("${(@s./.)a}")。ここでaはa=$(pwd)またはですa=%3~。繰り返しますが、このコードは機能しますがpwd機能しません%3~

私はまだシェルスクリプトに慣れていません。しかし、私が理解していることには違いはありません。私が何をしても、%~分割が正しく拡張されることはできません。私が試したこと:

# Ran from /home/me/code
a=%3~
b=$(pwd)
c=$PWD
d="/test/1/2"

e=$(echo "$a")
f="/$a"

echo $a # ~/code
echo $b # /home/me/code
echo $c # /home/me/code
echo $d # /test/1/2
echo $e # ~/code
echo $f # /~/code

("${(@s./.)a}") # ~/code
("${(@s./.)b}") # home me code
("${(@s./.)c}") # home me code
("${(@s./.)d}") # test 1 2
("${(@s./.)e}") # ~/code
("${(@s./.)f}") # /~/code

私は実際にzshが意図的に一貫性がないと考え始めました。しかし、私は何かを見逃していると確信しています。私も("${(ps./.)a}")それを読んだときに同じことをしなければならないと思ったので、それを試しました。私もIFSベースの分割、設定を試みましたIFS="/"。同じで、通常の文字列で動作しますが%~???

編集する:完全性のために、これは.zsh-themeファイルにあります。それが重要かもしれないと思いましたか?技術的には、私はそれを実行している人ではないので(oh-my-zshによって実行されます)、おそらくそのレベルで何か奇妙なことが起こっています。

答え1

プロンプトエスケープが通常評価されるコンテキストの外部でプロンプトエスケープを使用しようとしています。したがって、変数に文字列が含まれているので、%3~文字列を分割しようとすると、後で/に割り当てられた後にzshが展開されると仮定し%3~ます。%3~PS1PROMPT%3~

%3~パラメータ拡張を実行し、文字列をプロンプトでエスケープするには、%次のようにパラメータ拡張フラグを使用できます。${(%)a}

関連情報