une seule ligne d'instruction si dans un script shell ne fonctionne pas
C'est mon code:
#!/bin/bash
cat input$1 | ./prog$1 > output$1 && if[ "$2" != "" ]; diff output$1 expected$1;
Ce qui arrive alors:
$ ./run.sh
./run.sh: line 2: if[ no != ]: command not found
$
J'ai pensé que je pouvais courir si des instructions sur une seule ligne? c'est que quel est le problème?
OriginalL'auteur Alexander Bird | 2012-02-24
Vous devez vous connecter pour publier un commentaire.
il s'avère qu'il doit y avoir un espace entre le
if
et la[
. Aussi, j'ai mis dans lethen
etfi
mots-clés.La suite travaillé.
EDIT:
comme indiqué ci-dessous (et dans une autre réponse), ce qui peut élégamment être réduit à:
dans ce cas, je n'ai même pas le souvenir de l'une des règles sur la façon d'utiliser le
if
construire 🙂./prog$1 < input$1 > output$1 && [ "$2" != "" ] && diff output$1 expected$1
OriginalL'auteur Alexander Bird
baisse de la si. [] générer un nouveau "commande" et vous pouvez l'exécuter diff ou que ce soit après si il sort avec 0 à l'aide de && (la prochaine exécution si précédentes sorties ok). ici:
et votre one-liner:
OriginalL'auteur Ярослав Рахматуллин