それについて私ができることは何もありません。私は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~
PS1
PROMPT
%3~
%3~
パラメータ拡張を実行し、文字列をプロンプトでエスケープするには、%
次のようにパラメータ拡張フラグを使用できます。${(%)a}