używam zsh
.
Powiedz na przykład, że chcę usunąć bieżący katalog z cdpath
. Oznacza to, że muszę usunąć element oparty na treści, który pasuje do ${name:#to_be_removed}
wzór ładnie. Ale jest haczyk: to_be_removed
jest wynikiem zastąpienia (mianowicie, $(pwd)/
). Jak mógłbym to zrobić w elegancki sposób? Najlepsze, jakie udało mi się osiągnąć, to:
cdpath=("${(s/ /)$(eval echo $(echo "\${(@)cdpath:#${$(pwd)}/}"))}")
Jest to dla mnie powszechny przypadek użycia, a posiadanie ton tego * bałaganu SH zaczyna działać mi na nerwy ...
Dzięki, PythonNut
Odpowiedzi:
Jeśli chcesz usunąć bieżący katalog z
$cdpath
tablica, użyłbym po prostu(#s)
i(#e)
służyć temu samemu celowi^
i$
w ,, normalnych '' wyrażeniach regularnych, tj. początku i końcu ciągu. Proszę zanotować : Będą tego potrzebowaćsetopt EXTENDED_GLOB
pracować!Jeśli potrzebujesz polecenia zewnętrznego,
powinno działać.
Przypadek testowy:
źródło