Zsh, Aufteilen der Erweiterung von %~

Zsh, Aufteilen der Erweiterung von %~

Ich bin mit meinem Latein am Ende. Ich verwende zsh und versuche, die Erweiterung von einfach %3~auf das /Zeichen aufzuteilen. Das funktioniert gut mit der Erweiterung von $(pwd)und $PWD– beides sind ebenfalls pfadähnliche Zeichenfolgen.

Ich versuche, einen String mit dem folgenden Code aufzuteilen ("${(@s./.)a}")- wobei a entweder a=$(pwd)oder ist a=%3~. Auch dieser Code funktioniert mit pwd, aber nicht mit %3~.

Ich bin noch ein Neuling im Shell-Scripting – aber soweit ich es verstehe, sollte es keine Diskrepanz geben. Egal, was ich tue, ich bekomme die Erweiterung von nicht %~richtig zum Aufteilen. Dinge, die ich versucht habe:

# 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

Ich fange tatsächlich an zu glauben, dass zsh einfach absichtlich inkonsistent ist. Ich bin mir aber sicher, dass ich einfach etwas übersehe. Ich habe auch versucht ("${(ps./.)a}"), weil das, so wie ich es lese, dasselbe bewirken sollte. Ich habe auch versucht, IFS-basiertes Teilen und Festlegen zu verwenden IFS="/". Auch hier funktioniert es für normale Zeichenfolgen – funktioniert aber nicht für %~.???

BEARBEITEN: Der Vollständigkeit halber sei erwähnt, dass sich dies in einer .zsh-theme-Datei befindet. Ich nehme an, dass dies vielleicht von Bedeutung ist? Technisch gesehen bin ich nicht derjenige, der es ausführt (es wird von oh-my-zsh ausgeführt), also passiert auf dieser Ebene vielleicht etwas Seltsames.

Antwort1

Sie versuchen, ein Prompt-Escape außerhalb des Kontexts zu verwenden, in dem Prompt-Escapes normalerweise ausgewertet werden. Die Variable enthält also die Zeichenfolge %3~, Sie versuchen, die Zeichenfolge aufzuteilen, %3~was zu %3~(und ich gehe davon aus, dass sie später PS1/ zugewiesen wird PROMPT, das zsh dann erweitert ) führt %3~.

Wenn Sie Parametererweiterungen durchführen und die Zeichenfolge %3~wie ein Eingabeaufforderungs-Escape behandeln möchten, können Sie das Parametererweiterungsflag %wie folgt verwenden${(%)a}

verwandte Informationen