Zetknąłem się z tym tajemniczym fragmentem kodu, który, jak sądzę, zawiera pewną formę rozszerzania zmiennych.
echo "Usage: ${0##*/} [-f] [-u user] [--] "
Czy po znaku dolara następuje nawias klamrowy odpowiadający zmiennej bash $ 0? Jeśli tak, to dlaczego miałby używać tego pierwszego w przeciwieństwie do drugiego? Dzięki za każde oświecenie.
Odpowiedzi:
${variable}
to regularne rozszerzanie parametrów. Nawiasów klamrowych można użyć do rozgraniczenia nazwy zmiennej podczas rozwijania w środku innego ciągu. Na przykład, jeśli chcesz się rozwinąć$variablefoo
, powłoka nie będzie mogła wiedzieć, gdzie kończy się nazwa zmiennej. Używając${variable}foo
zamiast tego, powłoka dokładnie wie, co masz na myśli.Nawiasy klamrowe pozwalają również na wykonanie różnych innych operacji podczas rozbudowy. Powyższy przykład usuwa od lewej pasujące wyrażenie. Jeśli podany zostanie ciąg taki jak ścieżka
/a/b/c
, zostanie zwróconyc
. Jest to faktycznie równoważne z tymbasename
, co robi, ale w niektórych sytuacjach rozszerzanie parametrów może być wygodniejsze i czytelniejsze.Istnieją różne podstawowe operacje na łańcuchach znaków, które można wykonywać z rozszerzaniem parametrów. Będąc operacją wbudowaną, zazwyczaj wykonują proste zadania lepiej niż sed lub awk.
Jeśli jesteś zainteresowany skryptami powłoki, sugeruję przeczytanie tego przewodnika na wiki hakerskich bash.
źródło
Wykorzystuje rozszerzenie parametrów do usunięcia katalogu
$0
.źródło