Est-il possible de remplacer «alors» par des crochets?


10

J'ai d'abord appris à coder dans une Clangue et à utiliser

if ( code )
then 
code
fi

rend très difficile pour moi de lire mon code (ne me demandez pas pourquoi). Y a-t-il un substitut then?

Quelque chose comme ça:

if ( code ) {
 code
}
fi

Les réponses ci-dessous pourraient aider, mais si je peux ajouter, c'est une très bonne idée de s'habituer à la syntaxe de différentes langues. Si vous voulez trouver un emploi dans le développement de logiciels, ou devops ou en tant que sysadmin, vous devrez apprendre à reconnaître et à utiliser de nombreuses syntaxes différentes. Vous serez plus utile à tout employeur en étant aussi flexible que possible.
OldTimer

Réponses:


21

Il n'y a pas de substitut, mais vous pouvez utiliser les deux si vous avez vraiment besoin des accolades:

if true ; then {
    something
} fi

Cela utilise un groupe de commandes à contreventement explicite inutile comme corps du thenbloc. Toutes les commandes entre les accolades seront simplement exécutées dans le shell actuel lors de l' thenexécution, exactement comme si les accolades n'étaient pas là.

Je ne recommanderais pas vraiment ce style en général ou pour le code que quelqu'un d'autre devra lire, mais il vous donne les accolades que vous voulez, et il fera l'affaire si vous utilisez un éditeur qui nécessite des blocs contreventés ou quelque chose comme ca.


En voici un autre qui "ne vaut pas la peine d'être recommandé" - accolades à gogo: { if { [[ a == aa ]];};then { echo yes;};else { echo no;}; fi;}- en gros, lorsque vous en utilisez bashsuffisamment, la syntaxe standard devient assez familière, de sorte que ce n'est pas vraiment un problème.
Peter.O

15

Vous semblez être à la recherche de la coquille C ( csh, tcsh, etc ...). Sachez que les experts le déconseillent pour la programmation .

Je ne sais pas si la partie que vous considérez comme non attrayante est le fait qui thenest sur la ligne suivante? Si oui, envisagez d'utiliser le style suivant:

if condition; then
    stuff
fi

Je dois admettre que l'orthographe des noms de déclaration à l'envers comme fipour ifet esacpour case(mais pas elihwpour while!) Est un peu bizarre. Mais c'est le shell Bourne standard, la syntaxe de shell la plus portable que vous pouvez utiliser.


Merci pour votre réponse - je ne trouve pas le thendésagréable, c'est juste que mon éditeur mettra en évidence les {}paires correspondantes , et c'est utile lorsque j'ai une sorte d'erreur parce qu'alors je peux facilement voir toutes mes ifdéclarations et voir si quelque chose s'est mal passé .
智障 的 人

1
Ah oui. Ce , plus vide %commande qui saute à l'accolade correspondante / parenthèses / support. Je sympathise. Je manque vila %commande lors de la programmation en Python.
Celada

8
Avez-vous essayé le plugin vim matchit? Il supporte le% jump pour if / fi en bash et beaucoup d'autres blocs dans beaucoup d'autres langues. Voir ici - vim.org/scripts/script.php?script_id=39
amisax

@AmitKumar merci pour l'astuce. Je vais regarder!
Celada

9

C'est peut-être plus facile pour les yeux:

[ condition ] && {
   # statement 1
   # statment 2
   # ...
}

A part ça, il suffit de s'y habituer. Utilisez les idiomes de la langue.


1
Mais perdez le bashisme habituellement inutile et utilisez simplement un ensemble de supports.
Josip Rodin

5

Ce qui suit est proche de là. Et bizarre.

: if; { code; } && {
    code
}

Personnellement, je n'ai jamais aimé le ...

if true; then
more;fi

... me former. J'aime quand les mots de contrôle mènent . Il m'a toujours semblé étrange que la ...;thenforme dominante soit née.

if    this && that
then  do these things too
else  i will probably get upset
fi

C'est presque entièrement opposé à votre demande, mais c'est une autre façon de le faire. Vous pouvez également clouer toutes les redirections souhaitées sur la filigne selon vos besoins et elles s'appliqueront à l'ensemble du bloc.


Cette forme dominante semble être juste une autre incarnation du commun if(...) {, c'est-à-dire laisser l'accolade ouvrante sur la même ligne que ifdans les langages de type C.
Ruslan

@Ruslan - Peut-être - mais la ligne ne fait aucune différence en C, n'est-ce pas?
mikeserv

D'accord, mais la rupture de ligne ne fait pas non plus de différence dans le shell, n'est-ce pas? Le point-virgule après condition oblige déjà l'interpréteur à rechercher la poursuite de la ifcommande, même si sur la ligne suivante.
Ruslan

@Ruslan - oui - vous devez utiliser le ;délimiteur dans ce cas. C'est pourquoi ils le font.
mikeserv

Utiliser le :shell intégré comme ceci, juste pour qu'une ligne de code puisse être plus proche octet de la syntaxe C, ne devrait en aucun cas être encouragé.
Josip Rodin

0

Voici un moyen:

[ "$var" = "find" ] && echo "found"

est équivalent à:

if [ "$var" = "find" ]; then
  echo "found"
fi

Comme il l'indique dans la question, il souhaite des crochets . Mettez-en {...}autour echo "found", et vous vous dirigerez dans la bonne direction.
Peter.O

-2

J'utilise toujours:

if (code); then
   code;
fi

Probablement pas exactement ce que vous voulez mais c'est un peu plus comme ça.


2
Cela provoque un sous-shell, réduisant les performances.
Will
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.