2011-12-06 28 views
10

¿Podría alguien explicar qué significa este código?Explique este fragmento del código

creo que la segunda línea es "si el estado de salida es cero", entonces echo "comando válido", pero yo no entiendo la primera línea

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

Respuesta

2

me gustaría añadir que este es innecesariamente prolijo y podría reducirse a

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

o incluso más corto

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

La primera línea ejecuta el comando formado por el simple uso de todos argumentos a la secuencia de comandos, y redirigir la salida a/dev/null, que esencialmente lo descarta.

La variable incorporada [email protected] se expande a todos los parámetros posicionales, con cada parámetro es una cadena entrecomillada, es decir, los parámetros se transmiten intactos, sin interpretación ni expansión. Para obtener este efecto, creo que debe citar el uso de la variable, es decir, "[email protected]".

El operador &> redirige tanto stdout como stderr.

+1

sólo para apoyar: explicación se encuentra aquí: http: // TLDP .org/LDP/abs/html/internalvariables.html # APPREF – Yuri

+0

Creo que '$ *' y '$ @' solo son diferentes cuando están rodeados por comillas dobles. – mkb

+1

@mkb: tienes razón. Me temo @unwind no lo es: sin especificar '" $ @ "', los parámetros obtendrían espacio en blanco dividido, es decir, 'función TT() {$ @; }; TT ls 1 2 '3 4'' – choroba

4

De acuerdo con manual, [email protected] se expande a los parámetros posicionales, comenzando desde uno. Si llama a este script como scripty.sh ls /, ejecutará ls / mientras redirige todo el resultado al segmento de bits. Eso debería devolver el éxito (¡espero!) Y así el script imprimirá Valid command. Si lo llama scripty.sh ls /some/nonexistent/directory, entonces el comando ls debería fallar y el script no generará nada.

En realidad, creo que la secuencia de comandos se puede mejorar a poner comillas dobles alrededor de [email protected] para que los argumentos con espacios en ellos no se tropiecen con el intérprete.

Con [email protected], el comando ls "/Library/Application Support" se amplía a tres palabras. Con "[email protected]" se ha expandido a dos, y el comando se ejecuta tal como lo haría sin que la secuencia de comandos lo envolviera.

Cuestiones relacionadas