Odpowiedzi:
Jest bardzo podobny do backticks ''.
Nazywa się to podstawieniem poleceń ( specyfikacja POSIX ) i wywołuje podpowłokę. Polecenie w nawiasach klamrowych $()
lub między nimi (``) jest wykonywane w podpowłoce, a dane wyjściowe są następnie umieszczane w pierwotnym poleceniu.
W przeciwieństwie do backticksa, $(...)
forma może być zagnieżdżona. Możesz więc użyć podstawienia polecenia w innym podstawieniu.
Istnieją również różnice w zakresie znaków ucieczkowych w obrębie podstawienia. Wolę $(...)
formę.
echo `echo \`echo foo\`` bar
W POSIX lub POSIX-jak muszli ( ksh
, bash
, ash
, zsh
, yash
...), to jest jak ``
: wewnętrzna komenda $()
jest wykonywana i zastąpione przez standardowe wyjście. Dzielenie słów i generowanie nazw plików jest wykonywane, chyba że $()
znajduje się w cudzysłowie. A zatem
chmod 777 $(pwd)
należy zastąpić:
chmod 777 "$(pwd)"
aby uniknąć podziału słów i generowania nazw plików w bieżącej ścieżce katalogu roboczego.
Lub nawet lepiej (z wyjątkiem niektórych powłok, takich jak zsh, w przypadku zmiany nazwy katalogu):
chmod 777 "$PWD"
Since $PWD
jest specjalną zmienną, która przechowuje ścieżkę do bieżącego katalogu roboczego w powłokach POSIX.
Lub nawet lepiej:
chmod 777 .
Ponieważ .
wpis w bieżącym katalogu jest dowiązaniem twardym do samego katalogu.
To $()
służy do wykonywania polecenia głównie wewnątrz innego polecenia.
chmod 777 $(pwd)
pwd
polecenie podaje bieżący katalog roboczy. Kiedy więc wszystko zostanie wykonane, dane wyjściowe pwd zastąpią jego pozycję i będą służyć jako argument chmod
, w wyniku czego cały twój obecny katalog roboczy otrzyma pozwolenie, 777
które, jak sądzę, nigdy nie powinno być używane w środowisku produkcyjnym;).