Risposte:
È molto simile ai backtick ''.
Si chiama sostituzione dei comandi ( specifica posix ) e invoca una subshell. Il comando tra parentesi graffe $()
o tra i backtick (``) viene eseguito in una subshell e l'output viene quindi inserito nel comando originale.
A differenza dei backtick, il $(...)
modulo può essere nidificato. Quindi puoi usare la sostituzione dei comandi all'interno di un'altra sostituzione.
Ci sono anche differenze nella fuga di personaggi all'interno della sostituzione. Preferisco il $(...)
modulo.
echo `echo \`echo foo\`` bar
In POSIX o POSIX come gusci ( ksh
, bash
, ash
, zsh
, yash
...), è come ``
: il comando interno $()
viene eseguito e sostituito dal suo standard output. La divisione delle parole e la generazione del nome del file vengono eseguite a meno che non $()
siano racchiuse tra virgolette doppie. così
chmod 777 $(pwd)
dovrebbe essere sostituito con:
chmod 777 "$(pwd)"
per evitare la divisione di parole e la generazione di nomi di file sul percorso della directory di lavoro corrente.
O ancora meglio (tranne in alcune shell, come zsh, nel caso in cui la directory sia stata rinominata):
chmod 777 "$PWD"
Since $PWD
è una variabile speciale che contiene il percorso della directory di lavoro corrente nelle shell POSIX.
O ancora meglio:
chmod 777 .
Poiché la .
voce nella directory corrente è un collegamento reale a quella directory stessa.
Questo $()
è usato per eseguire un comando principalmente all'interno di altri comandi.
chmod 777 $(pwd)
pwd
Il comando fornisce la directory di lavoro corrente. Quindi, quando l'intera operazione viene eseguita, l'output di pwd sostituirà la sua posizione e servirà da argomento chmod
, e il risultato è che tutta la tua attuale directory di lavoro ottiene l'autorizzazione 777
che immagino non debba mai essere usata nell'ambiente di produzione;).