É possível substituir "então" por colchetes?

10

Aprendi a codificar em um Cidioma e usando

if ( code )
then 
code
fi

torna muito difícil ler meu código (não pergunte o porquê). Existe um substituto para then?

Algo assim:

if ( code ) {
 code
}
fi
智障 的 人
fonte
As respostas abaixo podem ajudar, mas se devo acrescentar, é uma boa idéia se acostumar com a sintaxe de diferentes idiomas. Se você deseja encontrar emprego no desenvolvimento de software, ou devops ou como administrador de sistemas, precisará aprender a reconhecer e usar muitas sintaxes diferentes. Você será mais valioso para qualquer empregador, sendo o mais flexível possível.
Oldtimer

Respostas:

21

Não há substituto, mas você pode usar os dois se realmente precisar do aparelho:

if true ; then {
    something
} fi

Isso usa um grupo de comandos desnecessário, explicitamente preparado , como o corpo do thenbloco. Qualquer comando nos chavetas será executado apenas no shell atual quando as thenexecuções forem executadas , exatamente como se as chaves não estivessem lá.

Eu realmente não recomendaria esse estilo em geral ou para o código que outra pessoa precisará ler, mas ele fornece os aparelhos que você deseja e serve para o truque se você estiver usando um editor que exija blocos ou algo parecido.

Michael Homer
fonte
Aqui está outro que "não vale a pena recomendar" - aparelhos em abundância: { if { [[ a == aa ]];};then { echo yes;};else { echo no;}; fi;}- basicamente, quando você usa o bashsuficiente, a sintaxe padrão se torna familiar o suficiente, para que não seja um problema.
Peter.O
15

Você parece estar olhando para o shell C ( csh, tcsh, etc ...). Esteja ciente de que os especialistas não recomendam a programação .

Não tenho certeza se a parte que você considera desagradável é o fato que thenestá na linha a seguir? Nesse caso, considere usar o seguinte estilo:

if condition; then
    stuff
fi

Eu tenho que admitir que os nomes das instruções de ortografia ao contrário, como fipara ife esacpara case(mas não elihwpara while!), São meio peculiares. Mas esse é o shell Bourne padrão, a sintaxe do shell mais portátil que você pode usar.

Celada
fonte
Obrigado pela sua resposta - não acho o thendesagradável, é apenas que o meu editor destacará os {}pares correspondentes , e isso é útil para quando eu tiver algum tipo de erro, porque então eu posso ver facilmente todas as minhas ifdeclarações e ver se algo deu errado .
智障的人
1
Ah sim. Que além vido %comando que salta para a cinta de correspondência / parêntese / suporte. Eu simpatizo. Sinto falta vido %comando ao programar em Python.
Celada
8
Você já experimentou o plugin matchit vim? Ele suporta o% jump para if / fi no bash e muitos outros blocos em muitos outros idiomas. Veja aqui - vim.org/scripts/script.php?script_id=39
amisax 25/06/2015
@AmitKumar obrigado pela dica. Vou dar uma olhada!
Celada
9

Talvez isso seja mais fácil para os olhos:

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

Fora isso, apenas se acostume. Use os idiomas do idioma.

helpermethod
fonte
1
Mas perca o basismo usualmente desnecessário e use apenas um conjunto de colchetes.
Josip Rodin
5

O seguinte está próximo de lá. E esquisito.

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

Eu pessoalmente nunca gostei do ...

if true; then
more;fi

... me formar. Eu gosto quando as palavras de controle levam . Sempre me pareceu estranho que a ...;thenforma predominante surgisse.

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

É quase totalmente oposto ao seu pedido, mas é outra maneira de fazer isso. Você também pode fialinhar qualquer redirecionamento desejado na linha, conforme necessário, e eles serão aplicados a todo o bloco.

mikeserv
fonte
Essa forma predominante parece ser apenas mais uma encarnação do comum if(...) {, ou seja, deixando a chave de abertura na mesma linha que ifnas línguas do tipo C.
Ruslan
@Ruslan - Talvez - mas a linha realmente não faz nenhuma diferença em C, faz?
mikeserv
Certo, mas a quebra de linha também não faz diferença no shell, faz? A condição de ponto e vírgula após já faz o intérprete procurar a continuação do ifcomando, mesmo que na próxima linha.
Ruslan
@Ruslan - sim - você tem que usar o ;delim nesse caso. É por isso que eles fazem.
mikeserv
Usando o :shell incorporado dessa maneira, apenas para que uma linha de código possa estar mais próxima da sintaxe C, não deve ser incentivada de forma alguma.
Josip Rodin
0

Aqui está uma maneira:

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

é equivalente a:

if [ "$var" = "find" ]; then
  echo "found"
fi
serenesat
fonte
Como ele afirma na pergunta, ele quer colchetes . Coloque um pouco {...}ao redor do echo "found", e então você estará indo na direção certa.
Peter.O
-2

Eu sempre uso:

if (code); then
   code;
fi

Provavelmente não é exatamente o que você quer, mas é um pouco mais parecido com.

user1794469
fonte
2
Isso causa um subshell, diminuindo o desempenho.
Will