2012-02-24 7 views

risposta

17

si scopre che è necessario uno spazio tra if e [. Inoltre, inserisco le parole chiave then e fi.

Quanto segue funzionava.

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

EDIT:

come commentato di seguito (e in un'altra risposta), questo può essere ridotto a elegantemente:

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

nel qual caso non ho nemmeno bisogno di ricordare nulla di le regole su come utilizzare il costrutto if :)

+2

è possibile abbreviare che un po ': './prog$1 < input$1 > uscita $ 1 && [ "$ 2"= ""!] && diff uscita $ 1 atteso $ 1' –

3

rilasciare l'if. [] genera un nuovo "comando" e puoi eseguire diff o qualsiasi altra cosa dopo se esce con 0 usando & & (esegui dopo se le uscite precedenti sono ok). qui:

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

e il vostro one-liner:

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

... come thr4wn ha commentato –

Problemi correlati