Existují dvě syntaxe pro substituci příkazů:s dolarovými závorkami a se zpětným zaškrtnutím.
Spuštěním top -p $(pidof init) a top -p `pidof init` dává stejný výstup. Jsou tyto dva způsoby, jak dělat totéž, nebo existují rozdíly?
Přijatá odpověď:
Staré zpětné uvozovky ` ` zacházet se zpětnými lomítky a vnořením trochu jinak. Nový styl $() interpretuje vše mezi ( ) jako příkaz.
echo $(uname | $(echo cat))
Linux
echo `uname | `echo cat``
bash: command substitution: line 2: syntax error: unexpected end of file
echo cat
funguje, pokud jsou vnořené zpětné uvozovky escapovány:
echo `uname | `echo cat``
Linux
zábava se zpětným lomítkem:
echo $(echo '\')
\
echo `echo '\'`
Nový styl $() platí pro všechny shelly vyhovující POSIX.
Jak poukázal mouviciel, starý styl ` ` může být nezbytné pro starší shelly.
Kromě technického hlediska, starý styl ` ` má také vizuální nevýhodu:
- Těžko postřehnutelné:
I like $(program) better than `program` - Snadno zaměnitelné s jedinou uvozovkou:
'`'`''`''`'`''`' - Není tak snadné psát (možná ani na standardním rozložení klávesnice)
(a SE používá ` ` pro vlastní účely byla bolest psát tuto odpověď 🙂