Istnieją dwa różne znaczenia słowa „przestarzałe”.
być przestarzałe: (głównie funkcja oprogramowania) może być użyteczne, ale uważane za przestarzałe i najlepiej unikane, zazwyczaj z powodu zastąpienia.
—Nowy słownik Oxford American
Zgodnie z tą definicją backticks są przestarzałe.
Nieaktualny stan może również oznaczać, że funkcja zostanie usunięta w przyszłości.
- Wikipedia
Według tej definicji backtyki nie są przestarzałe.
Nadal obsługiwane:
Powołując się na specyfikację otwartej grupy w językach poleceń powłoki , w szczególności w sekcji „2.6.3 Zastępowanie poleceń”, można zauważyć, że obie formy zastępowania poleceń, backticks ( `..cmd..`
) lub dolara ( $(..cmd..)
) są nadal obsługiwane, o ile idzie specyfikacja.
fragment
Podstawienie polecenia pozwala na zastąpienie wyjścia polecenia zamiast samej nazwy polecenia. Podstawienie polecenia następuje, gdy polecenie jest dołączone w następujący sposób:
$(command)
or (backquoted version):
`command`
Powłoka rozszerza podstawianie poleceń, wykonując polecenie w środowisku podpowłoki (patrz Środowisko wykonywania powłoki) i zastępując podstawienie polecenia (tekst polecenia wraz z załącznikami $()
lub cudzysłowami) standardowym wyjściem polecenia, usuwając sekwencje jednego lub więcej <newline> znaków na końcu podstawienia. Osadzone <newline> znaki przed końcem danych wyjściowych nie zostaną usunięte; można je jednak traktować jako ograniczniki pól i eliminować podczas dzielenia pól, w zależności od wartości IFS i obowiązującego cytowania. Jeśli dane wyjściowe zawierają bajty zerowe, zachowanie nie jest określone.
W ramach stylów zastępowania poleceń w cudzysłowie <lashlash> zachowuje swoje dosłowne znaczenie, z wyjątkiem następujących po nim znaków: „$”, „ \`
” lub <backlash> . Poszukiwanie pasującego cudzysłowu musi być spełnione przez pierwszy niecytowany nie ocalony cytat; podczas tego wyszukiwania, jeśli w komentarzu powłoki napotkany zostanie nieoznaczony znak zapytania, pojawi się dokument tutaj, osadzone polecenie w $(command)
formularzu lub ciąg cytowany, wyniki niezdefiniowane. Ciąg pojedynczego lub podwójnego cudzysłowu, który zaczyna się, ale nie kończy, w `...`
sekwencji „ ” daje niezdefiniowane wyniki.
W $(command)
formularzu wszystkie znaki następujące po otwartym nawiasie do pasującego nawiasu zamykającego stanowią polecenie. Do polecenia można użyć dowolnego poprawnego skryptu powłoki, z wyjątkiem skryptu składającego się wyłącznie z przekierowań, który daje nieokreślone wyniki.
Dlaczego więc wszyscy mówią, że backticks są przestarzałe?
Ponieważ większość przypadków użycia powinna wykorzystywać formę dolara amerykańskiego zamiast odwrotnych. (Nieaktualne w pierwszym sensie powyżej.) Wiele najbardziej renomowanych witryn (w tym U&L) również często o tym informuje, więc to dobra rada. Porady tej nie należy mylić z jakimś nieistniejącym planem usunięcia wsparcia dla backticksa z powłok.
BashFAQ # 082 - Dlaczego $ (...) jest lepszy niż `...` (backticks)?
fragment
`...`
jest starszą składnią wymaganą tylko przez najstarszą z nieobsługiwanych powłok bourne-shell. Istnieje kilka powodów, aby zawsze preferować $(...)
składnię:
...
Bash Hackers Wiki - Przestarzała i przestarzała składnia
fragment
Jest to starsza kompatybilna z Bourne forma zastępowania poleceń . Zarówno składnia, jak `COMMANDS`
i $(COMMANDS)
składnia są określone przez POSIX, ale ta druga jest bardzo preferowana, chociaż ta pierwsza jest niestety nadal bardzo rozpowszechniona w skryptach. Zastępowania poleceń w nowym stylu są szeroko implementowane przez każdą nowoczesną powłokę (i niektóre). Jedynym powodem korzystania z backticków jest kompatybilność z prawdziwą powłoką Bourne'a (jak Heirloom). Zastępowania poleceń za pomocą backticka wymagają specjalnego ucieczki po zagnieżdżeniu, a przykłady znalezione w środowisku naturalnym są niepoprawnie cytowane częściej niż nie. Zobacz:
Dlaczego $ (...) jest lepszy niż `...` (backticks)? .
Standardowe uzasadnienie POSIX
fragment
Z powodu tych niespójnych zachowań nie zaleca się stosowania poprzednio cytowanych odmian podstawiania poleceń dla nowych aplikacji, które zagnieżdżają podstawienia poleceń lub próbują osadzić złożone skrypty.
UWAGA: Ten trzeci fragment (powyżej) pokazuje kilka sytuacji, w których backty po prostu nie działają, ale działa na nich metoda nowszych dolarów, zaczynając od następującego akapitu:
Ponadto składnia cytowana wstecz ma historyczne ograniczenia dotyczące zawartości wbudowanego polecenia. Podczas gdy nowszy formularz „$ ()” może przetwarzać dowolny prawidłowy skrypt osadzony, formularz z cudzysłowem nie obsługuje niektórych prawidłowych skryptów zawierających cudzysłowy.
Jeśli będziesz dalej czytać tę sekcję, awarie zostaną podświetlone, pokazując, jak nie powiodłyby się przy użyciu backticksa, ale pracuj przy użyciu nowszej notacji parens.
Wnioski
Dlatego lepiej jest używać parenów zamiast dolarowych, ale tak naprawdę nie używasz czegoś, co było technicznie „przestarzałe”, jak w „to przestanie działać całkowicie w pewnym zaplanowanym punkcie”.
Po przeczytaniu tego wszystkiego powinieneś zabrać ze sobą to, że gorąco zachęcasz do korzystania z parens dolara, chyba że potrzebujesz konkretnej kompatybilności z prawdziwą oryginalną powłoką Bourne'a inną niż POSIX.
cd
w katalogu, na przykład dlaczego$(...)
notacja jest łatwiejsza w użyciu niż zagnieżdżone cudzysłowy.