2012-02-24 19 views

Respuesta

17

resulta que debe haber un espacio entre if y [. Además, puse las palabras clave then y fi.

Funcionó a continuación.

#!/bin/bash 
cat input$1 | ./prog$1 > output$1 && if [ "$2" != "" ]; then diff output$1 expected$1; fi 

EDIT:

como comentó más adelante (y en otra respuesta), esto puede ser acortado a elegantemente:

cat input$1 | ./prog$1 > output$1 && [ "$2" != "" ] && diff output$1 expected$1 

en cuyo caso no tienen ni siquiera para recordar cualquiera de las reglas sobre cómo usar el constructo if :)

+2

se puede acortar de que un poco: './prog$1 < input$1 > salida de $ 1 && [ "$ 2"= ""!] && diff salida de $ 1 esperado $ 1' –

3

soltar el si. [] generará un nuevo "comando" y puede ejecutar diff o lo que sea después si sale con 0 usando & & (ejecute el siguiente si las salidas anteriores son correctas). aquí:

echo lol && [ $((10-1)) -eq 9 ] && echo math\! 

y su sola línea:

#!/bin/bash 
cat input$1 | ./prog$1 > output$1 && [ "$2" != "" ] && diff output$1 expected$1 
+0

... como thr4wn comentó –

Cuestiones relacionadas