Une ligne si la déclaration en bash
Je n'ai jamais programmé en bash... pourtant j'essaie de résoudre un problème pour un anchievement dans un jeu (codingame.com)
J'ai le code suivant:
for (( i=0; i<N-1; i++ )); do
tmp=$(( sorted_array[i+1] - sorted_array[i] ));
if [ $tmp < $result ]; then result=$tmp fi
done
Et cette erreur:
/tmp/Answer.sh: line 42: syntax error near unexpected token `done'at Answer.sh. on line 42
/tmp/Answer.sh: line 42: `done' at Answer.sh. on line 42
Je veux comparer des valeurs proches de mon tableau et de stocker le minimun diference entre eux... mais je ne peux pas comprendre comment le faire d'une instruction if dans bash
L'exécution de ce par le biais de shellcheck.net serait attraper quelques-uns des éléments qui, d'ailleurs, les gens ici n'ont pas.
Vous l'esprit --
Vous l'esprit --
if (( tmp < result )); then result=$tmp; fi
est également une option, qui se débarrasse de la -lt
vs <
problème, et le potentiel pour la citation.OriginalL'auteur RagnaRock | 2015-06-29
Vous devez vous connecter pour publier un commentaire.
Chaque commande doit se terminer correctement, soit par un saut de ligne ou un point-virgule. Dans ce cas, vous avez besoin de séparer la cession de
result
du mot-cléfi
. Essayez d'ajouter un point-virgule;Aussi, vous devez utiliser
lt
plutôt que<
, depuis<
est un opérateur de redirection. (Sauf si vous avez l'intention d'exécuter une commande nommée$tmp
avec entrée à partir d'un fichier nommé par la variable$result
)séparer les jetons sert à mettre fin à la commande dans l'analyseur.
Le point-virgule indique la fin d'une instruction, il n'est pas arrêter quoi que ce soit.
La commande est divisé en jetons au moment de l'exécution.
Fine, elle met fin à une déclaration puis, êtes-vous d'argumenter avec vous maintenant ??
OriginalL'auteur William Pursell
Il vous manque un point-virgule et de la nécessité d'utiliser
-lt
au lieu de<
, comme d'autres l'ont souligné.Une alternative à la
if
déclaration serait d'utiliser la logique et opérateur&&
:Vous pensez que si quelqu'un demander "Comment puis-je sauter par la fenêtre" je ne suis pas autorisé à répondre à "s'il vous Plaît ne faites pas ça!"? Est fait explicitement dire:
Read the question carefully. What, specifically, is the question asking for? Make sure your answer provides that – or a viable alternative.
. Merci de lire la FAQ avant de vous en bas de vote et/ou de commentaire.Lien vers la FAQ: stackoverflow.com/help/how-to-answer .. Vous avez fait vandalizm, j'ai signalé que l'.
Mauvaise analogie, qu'ils ne font pas quelque chose de dangereux. Vous avez juste posté une même réponse à la accepté une avec un non sens en plus de &&, qui ne fait rien mais mal lisibilité.
Donc, vous pensez qu'un
test && cmd
n'est pas une alternative viable pour une seule commande, une seule ligne si le rapport en bash? Commun!!! La Discussion est terminée.OriginalL'auteur hek2mgl
Votre
if
doit être suivie par unfi
de commande, mais vous n'avez pas une telle commande. Vous avez unfi
dans votre code, mais c'est au milieu d'une autre commande, donc il n'est pas plus complète leif
puis lefi
dansecho fi
serait. Si vous vont fusionner ensemble de lignes, vous devez utiliser un point-virgule pour séparer les commandes.Donc à l'effondrement
que vous souhaitez utiliser
Exception:
do
etthen
peut être suivi d'une commande, de sorte que vous n'avez pas besoin d'un point-virgule après eux lors de la fusion de la ligne suivante.Remarquez que vous n'avez pas besoin de résilier votre commandes avec
;
?;
n'est nécessaire entre les commandes.À l'intérieur d'un
test
([]
),-lt
est utilisé pour comparer des nombres.-lt
Fixe.
OriginalL'auteur ikegami