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/sh
styló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)?
shell
command-substitution
Michael Ekstrand
źródło
źródło
`...`
. 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)csh
nie mają$(...)
(ale też nie ma sensu ich używać ani uczyć).$()
- Shift + 4,9, Shift + 0 - 5 naciśnięć klawiszy;Odpowiedzi:
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.
źródło
$()
lepszy wygląd, ale backty są łatwiejsze i bardziej KISS; może być Pavlovian OCDish konsekwencją ogólnego programowania.`
jest Altrg + E, (niewygodne rodzaju), natomiast$
,(
,)
nie potrzeba żadnego modyfikatora.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? .
źródło
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ą)
źródło
/bin/sh
musi być zgodny. Solaris/bin/sh
jest 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,sh
aby wyszukać ją na ścieżce zwróconej przezgetconf PATH
.