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)
pwdIl 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 777che immagino non debba mai essere usata nell'ambiente di produzione;).