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}