Risposta breve
Data la sintassi $(command) &
, il risultato è lo stesso come se hai preso l'uscita di correre appena command
provato e poi per l'esecuzione che come un comando. E tutto ciò sarebbe fatto in background, il che significa che non ci sarebbe alcun output visibile o sospeso nel terminale.
Ad esempio, se avessimo un file di testo chiamato mycommand.txt
con il contenuto:
echo "Hello World"
Quindi il comando
$(cat mycommand.txt) &
sarebbe equivalente alla corsa
echo "Hello World" &
Ma da quando abbiamo aggiunto la e commerciale ( &
), non vedremmo alcun output da questo comando, quindi sarebbe piuttosto inutile in questo esempio.
Risposta lunga (Spiegazione)
Simbolo del dollaro $
(variabile)
Il simbolo del dollaro prima della cosa tra parentesi si riferisce di solito a una variabile. Questo significa che questo comando sta passando un argomento a quella variabile da uno script bash o sta ottenendo il valore di quella variabile per qualcosa. La differenza nello script bash per richiamare e dichiarare variabili va come tale:
Dichiarare una variabile senza il simbolo del dollaro e chiamarla con un simbolo del dollaro. Ad esempio, uno script che contiene questo
#!/bin/bash
STR="Hello World!"
echo $STR
Avrebbe prodotto questo
Hello World!
Parentesi ()
: sostituzione del comando
La sostituzione dei comandi consente all'output di un comando di sostituire il comando stesso. La sostituzione dei comandi si verifica quando un comando è racchiuso come segue:
$(command)
o
`command`
Bash esegue l'espansione eseguendo il comando in un ambiente subshell e sostituendo la sostituzione del comando con l'output standard del comando, eliminando eventuali newline finali. Le nuove righe incorporate non vengono eliminate, ma possono essere rimosse durante la divisione delle parole. La sostituzione del comando $(cat file)
può essere sostituita dall'equivalente ma più veloce $(< file)
.
E commerciale &
: processo in background
E poi la e commerciale, o &
simbolo, è come hai detto, utilizzata per eseguirla in background.
$( )
, ma non c'è riposo. È solo$(command) &
, questo è ciò che mi confonde.