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ěď 🙂