Cosa fa $ (comando) e fa?


10

Ho visto la seguente sintassi in uno script bash:

 >$(command) &

So che la e commerciale &alla fine fa eseguire un comando in background, ma non l'ho mai visto in combinazione con il simbolo del dollaro più le parentesi attorno al comando.

Che cosa fa?


Conosco quel tipo di utilizzo $( ), ma non c'è riposo. È solo $(command) &, questo è ciò che mi confonde.
AlphaOmega,

Risposte:


20

Risposta breve

Data la sintassi $(command) &, il risultato è lo stesso come se hai preso l'uscita di correre appena commandprovato 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.txtcon 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.


2

prende l'output di "command" come comando e lo esegue in background. Funzionalmente è paragonabile a "eval"


È un simbolo presente nella finestra del terminale che, a seconda di ciò che si sta tentando di fare, potrebbe non essere necessario per l'ingresso da parte dell'utente. Quando aprirai un terminale lo vedrai immediatamente lì.
monkeyman_stones,

Non capisco. Sebbene breve, questo risponde alla domanda effettiva mentre la risposta accettata no.
mveroone,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.