Ich benutze zsh
.
Angenommen, ich möchte das aktuelle Verzeichnis entfernen cdpath
. Das bedeutet, dass ich ein inhaltsbasiertes Element entfernen muss, das gut zum ${name:#to_be_removed}
Muster passt . Aber es gibt einen Haken: to_be_removed
ist das Ergebnis der Substitution (nämlich $(pwd)/
). Wie würde ich das in einer eleganten Fasion durchziehen? Das Beste, was ich geschafft habe, ist Folgendes:
cdpath=("${(s/ /)$(eval echo $(echo "\${(@)cdpath:#${$(pwd)}/}"))}")
Dies ist ein häufiger Anwendungsfall für mich, und Tonnen von diesem * SH-Chaos gehen mir langsam auf die Nerven ...
Danke, PythonNut
Antworten:
Wenn Sie das aktuelle Verzeichnis aus dem
$cdpath
Array entfernen möchten , würde ich einfach verwenden(#s)
und(#e)
dienen dem gleichen Zweck wie^
und$
in "normalen" regulären Ausdrücken, dh Anfang und Ende der Zeichenkette. Bitte beachten Sie : Diese müssensetopt EXTENDED_GLOB
funktionieren!Wenn Sie einen externen Befehl benötigen,
sollte arbeiten.
Testfall:
quelle