¿Es posible sustituir "entonces" con paréntesis?

10

Primero aprendí a codificar en un Cidioma y a usar

if ( code )
then 
code
fi

hace que sea realmente difícil para mí leer mi código (no pregunte por qué). ¿Hay un sustituto para then?

Algo como esto:

if ( code ) {
 code
}
fi
智障 的 人
fuente
Las respuestas a continuación podrían ayudar, pero si pudiera agregar, es una muy buena idea acostumbrarse a la sintaxis de diferentes idiomas. Si quiere encontrar empleo en desarrollo de software, devops o como administrador de sistemas, tendrá que aprender a reconocer y utilizar muchas sintaxis diferentes. Serás más valioso para cualquier empleador al ser lo más flexible posible.
OldTimer

Respuestas:

21

No hay sustituto, pero puede usar ambos si realmente necesita los frenos:

if true ; then {
    something
} fi

Que utiliza un grupo de comandos innecesariamente entre paréntesis como el cuerpo del thenbloque. Cualquier comando en las llaves simplemente se ejecutará en el shell actual cuando se thenejecute, exactamente como si las llaves no estuvieran allí.

Realmente no recomendaría este estilo en general o para el código que alguien más necesitará leer, pero le da los frenos que desea, y funcionará si está utilizando un editor que requiere bloques o algo como eso.

Michael Homer
fuente
Aquí hay otro que "no vale la pena recomendar" - llaves en abundancia: { if { [[ a == aa ]];};then { echo yes;};else { echo no;}; fi;}- básicamente, cuando usas lo bashsuficiente, la sintaxis estándar se vuelve lo suficientemente familiar, por lo que no es un gran problema.
Peter.O
15

Parece que estás en busca de la shell C ( csh, tcsh, etc ...). Tenga en cuenta que los expertos recomiendan no hacerlo para la programación .

No estoy seguro de si la parte que considera poco atractiva es el hecho de que thenestá en la siguiente línea. Si es así, considere usar el siguiente estilo:

if condition; then
    stuff
fi

Tengo que admitir que los nombres de los enunciados ortográficos al revés, como fifor ify esacfor case(¡pero no elihwfor while!) Es un poco peculiar. Pero ese es el shell Bourne estándar, la sintaxis de shell más portátil que puede usar.

Celada
fuente
Gracias por su respuesta: no me parece thenpoco atractivo, es solo que mi editor resaltará los {}pares correspondientes , y eso es útil para cuando tengo algún tipo de error porque entonces puedo ver fácilmente todas mis ifdeclaraciones y ver si algo salió mal .
智障 的 人
1
Ah, sí. viEl %comando de ese plus que salta al paréntesis / paréntesis / paréntesis correspondiente. Yo simpatizo. Echo vide menos el %comando al programar en Python.
Celada
8
¿Has probado el complemento matchit vim? Admite el% jump para if / fi en bash y muchos otros bloques en muchos otros idiomas. Ver aquí: vim.org/scripts/script.php?script_id=39
amisax
@AmitKumar gracias por el consejo. ¡Le echaré un vistazo!
Celada
9

Tal vez esto sea más fácil para los ojos:

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

Aparte de eso, solo acostúmbrate. Usa los modismos del lenguaje.

método de ayuda
fuente
1
Pero pierda el bashism generalmente innecesario y simplemente use un conjunto de paréntesis.
Josip Rodin
5

Lo siguiente está cerca de allí. Y raro

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

Personalmente nunca me gustó el ...

if true; then
more;fi

... formarme a mí mismo. Me gusta cuando las palabras de control llevan . Siempre me pareció extraño que la ...;thenforma predominante surgiera en absoluto.

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

Es casi completamente opuesto a su solicitud, pero es otra forma de hacerlo. También puede agregar cualquier redireccionamiento deseado a la filínea según sea necesario y se aplicará a todo el bloque.

mikeserv
fuente
Esta forma predominante parece ser solo otra encarnación de lo común if(...) {, es decir, dejar una llave de apertura en la misma línea que ifen los lenguajes tipo C.
Ruslan
@Ruslan - Quizás - pero la línea en realidad no hace ninguna diferencia en C, ¿verdad?
mikeserv
Correcto, pero tampoco el salto de línea hace una diferencia en el shell, ¿verdad? La condición de punto y coma después ya hace que el intérprete busque la continuación del ifcomando, incluso si está en la línea siguiente.
Ruslan
@Ruslan, sí, tienes que usar el ;delim en ese caso. Es por eso que lo hacen.
mikeserv
El uso de la :shell incorporada de esta manera, solo para que una línea de código pueda estar en byte más cerca de la sintaxis C, no se debe alentar de ninguna manera.
Josip Rodin
0

Aquí hay una manera:

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

es equivalente a:

if [ "$var" = "find" ]; then
  echo "found"
fi
serenesat
fuente
Como dice en la pregunta, quiere corchetes . Ponga un poco {...}alrededor echo "found"y luego se dirigirá en la dirección correcta.
Peter.O
-2

Yo siempre uso:

if (code); then
   code;
fi

Probablemente no sea exactamente lo que quieres, pero es un poco más parecido.

usuario1794469
fuente
2
Eso causa una subshell, bajando el rendimiento.
Se