2012-01-20 7 views
44

widzę w bashu dwie różne formy, które wydaje się zrobić to samo:

`some command` 

i

$(some command) 

Jaka jest różnica między nimi, a kiedy należy używać każdego z nich?

Odpowiedz

44

Nie ma różnicy semantycznej. Składnia zwrotna to starsza i mniej wydajna wersja. Zobacz man bash, punkt "Zastępowanie poleceń".

Jeśli twoja powłoka obsługuje składnię $(), wolą ją, ponieważ może być zagnieżdżona.

+0

Widzę, że można również zagnieżdżać. Na przykład: '\' echo \\ 'foo \\' \ '' –

+10

@MishaMoroshko: Wyrażenia takie jak '\ echo \' foo \ '\' (w przeciwieństwie do '$ (echo $ (foo)) Działają ogólnie ze względu na nieodłączną niejednoznaczność, ponieważ każde "\" może być otwierane lub zamykane. Może działać w szczególnych przypadkach ze względu na szczęście lub specjalne funkcje. – thiton

+1

Istnieje różnica semantyczna: składnia zwrotna obsługuje odwrotne ukośniki w inny i nieoczywisty sposób. Zobacz: http://mywiki.wooledge.org/BashFAQ/082 – benkc