2011-12-06 10 views
10

Qualcuno potrebbe spiegare cosa significa questo bit di codice per favore?Spiegare questo bit di codice

credo che la seconda linea è "se lo stato di uscita è zero", then echo "comando valido", ma io non capisco la prima linea

[email protected] &>/dev/null 
if [[ $? = 0 ]] 
then 
    echo "Valid command" 
fi 

risposta

2

vorrei aggiungere che questo è inutilmente prolisso e potrebbe essere ridotto a

if "[email protected]" &>/dev/null 
then 
    echo "Valid command" 
fi 

o anche più breve

"[email protected]" &>/dev/null && echo "Valid command" 
7

La prima riga esegue il comando formata semplicemente utilizzando tutti argomenti per lo script e reindirizzamento dell'output su/dev/null che essenzialmente lo getta via.

La variabile integrata [email protected] si espande su tutti i parametri posizionali, ogni parametro è una stringa quotata, ovvero i parametri vengono passati intatti, senza interpretazione o espansione. Per ottenere questo effetto, credo che sia necessario citare l'uso della variabile, ad esempio "[email protected]".

L'operatore &> reindirizza sia stdout che stderr.

+1

solo per sostenere: spiegazione si trova qui: http: // TLDP .org/LDP/abs/html/internalvariables.html # APPREF – Yuri

+0

Penso che '$ *' e '$ @' siano solo diversi quando sono circondati da virgolette. – mkb

+1

@mkb: hai ragione. Temo che @unwind non lo sia: senza specificare '" $ @ "', i parametri otterrebbero la divisione degli spazi bianchi, ovvero la funzione ' ' TT() {$ @; }; TT ls 1 2 '3 4'' – choroba

4

In base allo manual, [email protected] si espande ai parametri posizionali, a partire da uno. Se si chiama questo script come scripty.sh ls /, verrà eseguito ls / durante il reindirizzamento di tutto l'output nel bucket di bit. Questo dovrebbe restituire il successo (spero!) E quindi lo script stamperà Valid command. Se lo chiami scripty.sh ls /some/nonexistent/directory, il comando ls dovrebbe fallire e lo script non produrrà nulla.

In realtà, penso che lo script possa essere migliorato per inserire le virgolette attorno a [email protected] in modo che gli argomenti con spazi al loro interno non facciano scoppiare l'interprete.

Con [email protected] il comando ls "/Library/Application Support" viene esteso a tre parole. Con "[email protected]" è espanso a due, e il comando viene eseguito proprio come sarebbe senza lo script che lo avvolge.

Problemi correlati