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)?

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.


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? .


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ą)


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.