Czy jest jakiś powód, aby używać lub uczyć zastępowania „…” nowym opracowaniem?

16

Rozumiem, że bardziej nowoczesna $(...)składnia zastępowania poleceń jest lepsza niż `składnia oparta na starej , ze względu na łatwiejsze i mniej podatne na błędy zagnieżdżanie i unikanie składni.

Ponadto wydaje się, że większość /bin/shstylów w nowoczesnych powłokach obsługuje $(…):

  • grzmotnąć
  • ash (a zatem BusyBox, więc najbardziej osadzony Linux)
  • dziarskość
  • FreeBSD / bin / sh

I $(…)jest określony przez IEEE 1003.1.

Mam więc 2 bardzo powiązane pytania:

  • Czy jest jakiś powód, aby używać `w nowym procesie tworzenia skryptów powłoki, chyba że znasz konkretny stary system, na którym skrypt będzie musiał działać?
  • Czy jest jakiś powód, aby nie uczyć studentów programowania w systemie UNIX tylko pisania $(...)i dyskutować `tylko jako przestarzały wariant, który prawdopodobnie napotkają, gdy będą czytać skrypty powłoki innych programistów (i mogą potrzebować, jeśli pracują ze naprawdę starym systemem lub niestandardowym z jakiegoś powodu)?
Michael Ekstrand
źródło
7
Nie, nie ma sensu używać ani uczyć `...`. Jest tam tylko w przypadku przenośności wstecznej tylko z powłoką Bourne'a (podobnie jak w przypadku powłoki Bourne'a ^(tak samo jak |) dla przenośności wstecznej z powłoką Thomson). Zauważ jednak, że (t)cshnie mają $(...)(ale też nie ma sensu ich używać ani uczyć).
Stéphane Chazelas
2
To sprawa Groucho Marksa;; {)
goldilocks
2
Czekaj, backticks są przestarzałe? Czy ktoś ma kanoniczne odniesienie wyjaśniające dlaczego? (Dziwne znaki składniowe są bardzo trudne do wyszukiwania.)
MathematicalOrchid
1
Łatwiejsze pisanie. `` - 2 naciśnięcia klawiszy; $()- Shift + 4,9, Shift + 0 - 5 naciśnięć klawiszy;
Vi.
3
@MathematicalOrchid stackoverflow.com/questions/9405478/… wydaje się całkiem niezły. Backticks są bardzo trudne do prawidłowego zagnieżdżenia, szczególnie gdy w grę wchodzą dodatkowe cytaty.
Michael Ekstrand

Odpowiedzi:

19

Ponieważ często stosowane są tyknięcia wsteczne, sensowne jest nauczenie tego konstruktu składniowego.

Oczywiście $()podstawienie poleceń stylu powinno być podkreślone jako styl domyślny (i standardowa konstrukcja zgodna).

Dlaczego tyknięcia są nadal popularne? Ponieważ oszczędzają jedną postać podczas pisania i są prawdopodobnie mniej obciążone dla oka.

maxschlepzig
źródło
18
Nie scharakteryzowałbym jako „mniej obciążającego dla oka” jako cechy, ale błąd ...
jasonwryan
1
Zwykle używam backsticksa w prostych przypadkach, a $ () w skomplikowanych przypadkach. Ale do tej pory bardzo wiele skryptów używało backsticksów, a oceny musiały być w stanie je rozszerzyć.
Peter - Przywróć Monikę
@ jasonwryan W takim przypadku błąd nie wynika z zwięzłości, ale z arbitralnych problemów. Tzn. Użycie backticksa jest łatwiejsze dla oka, ale nie dlatego jest amortyzowane. Chyba, że ​​próbujesz powiedzieć, że cukier jest z definicji zły i wszyscy powinniśmy preferować asm na cokolwiek ... Właściwie podoba mi się $()lepszy wygląd, ale backty są łatwiejsze i bardziej KISS; może być Pavlovian OCDish konsekwencją ogólnego programowania.
goldilocks
@Goldilocks, gdy się zestarzejesz, czytelność i tak jest o wiele trudniejsza: w moim wieku
backty
3
Na francuskiej klawiaturze, na przykład, `jest Altrg + E, (niewygodne rodzaju), natomiast $, (, )nie potrzeba żadnego modyfikatora.
Stéphane Chazelas
5

Nie używałbym ich do programowania, a nauczanie używania podstawiania zwrotnego w skryptach powłoki jako przestarzałe jest w porządku (wydaje się, że jest to konsensus). Nie sądzę jednak, aby były z natury złe i (przynajmniej sądząc po przeciętnym tutorialu do wiersza poleceń Linuksa) nadal są często używane w prostych fragmentach / liniach, w których prawdopodobnie nie zostaną zagnieżdżone i rzeczy, które ty zrobię to tylko raz.

Zobacz Zastępowanie poleceń: backticks lub znak dolara / paren w załączeniu? .

jaymmer - Przywróć Monikę
źródło
1

Unikam używania $()konstruktu, ponieważ nie jest przenośny - w prawdziwym świecie. Wymieniłeś cztery pociski - jest ich o wiele więcej niż wokół (rząd wielkości?). Spróbuj uruchomić skrypt w Solaris / bin / sh i zobacz, jak sobie radzisz.

Z drugiej strony, kiedy przestajesz obsługiwać stare systemy? czy nigdy nie możesz przejść do nowych sposobów robienia rzeczy? Uważam, że powinieneś zaufać własnemu osądowi, a jeśli widzisz wyraźną przewagę nowej drogi nad starą, to idź po nią ... to nie jest jeden z nich (osobiście uważam, że bactiki są znacznie jaśniejsze - nie mogą być mylone z podstawieniem zmiennych powłoki, co jest inną rzeczą)

Murray Jensen
źródło
1
POSIX nie określa, że /bin/shmusi być zgodny. Solaris /bin/shjest rzeczywiście bardzo niezgodny - chociaż Solaris 9/10 / ... jest oficjalnie zgodny z POSIX. To $()tylko jeden konstrukt, którego nie rozumie. Ale jest wiele innych, których nie rozumie lub są interpretowane inaczej. Przenośny sposób uzyskania zgodności, shaby wyszukać ją na ścieżce zwróconej przez getconf PATH.
maxschlepzig