zmienna Cryptic Bash

2

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.

cdaaawg
źródło
To może uzyskać lepszą odpowiedź na stackoverflow.com
Raystafarian

Odpowiedzi:

3

${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}foozamiast 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ócony c. Jest to faktycznie równoważne z tym basename, 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.

mkaito
źródło
Dobre wyjaśnienie mkaito. Oto kilka linków, które również dobrze to wyjaśniają, każdy w swoim własnym stylu. Sekcja „Cięcie strun jak profesjonalista” tutaj link i oczywiście link do
cdaaawg