È possibile sostituire "allora" tra parentesi?


10

Per prima cosa ho imparato a programmare in una Clingua e ad usare

if ( code )
then 
code
fi

mi rende davvero difficile leggere il mio codice (non chiedermi perché). C'è un sostituto per then?

Qualcosa come questo:

if ( code ) {
 code
}
fi

Le risposte che seguono potrebbero aiutare, ma se potessi aggiungere, è una buona idea abituarsi alla sintassi di lingue diverse. Se vuoi trovare lavoro nello sviluppo di software, o devops o come amministratore di sistema, dovrai imparare a riconoscere e usare molte diverse sintassi. Sarai più prezioso per qualsiasi datore di lavoro essendo il più flessibile possibile.
OldTimer

Risposte:


21

Non c'è sostituto, ma puoi usare entrambi se hai davvero bisogno delle parentesi graffe:

if true ; then {
    something
} fi

Che utilizza un gruppo di comandi esplicitamente rinforzato come corpo del thenblocco. Qualsiasi comando tra parentesi graffe verrà eseguito nella shell corrente solo quando le thenesecuzioni, esattamente come se le parentesi graffe non fossero presenti.

Non consiglierei davvero questo stile in generale o per il codice che qualcun altro dovrà leggere, ma ti dà le parentesi graffe che vuoi e farà il trucco se stai usando un editor che richiede blocchi controventati o qualcosa del genere.


Eccone un altro che "non vale la pena consigliare": tra parentesi graffe: { if { [[ a == aa ]];};then { echo yes;};else { echo no;}; fi;}- fondamentalmente, quando si usa bashabbastanza, la sintassi standard diventa abbastanza familiare, quindi non è un grosso problema.
Peter

15

Sembra che tu stia cercando la C shell ( csh, tcsh, ecc ...). Essere consapevoli del fatto che gli esperti lo sconsigliano per la programmazione .

Non sono sicuro che la parte che ritieni poco interessante sia il fatto che si thentrova nella riga seguente? In tal caso, considera l'utilizzo del seguente stile:

if condition; then
    stuff
fi

Devo ammettere che i nomi delle dichiarazioni ortografiche all'indietro come fiper ife esacper case(ma non elihwper while!) Sono un po 'eccentrici. Ma questa è la shell Bourne standard, la sintassi della shell più portatile che puoi usare.


Grazie per la tua risposta: non trovo thenpoco interessante, è solo che il mio editor evidenzierà le {}coppie corrispondenti , e questo è utile per quando ho un qualche tipo di errore perché posso facilmente vedere tutte le mie ifdichiarazioni e vedere se qualcosa è andato storto .
的 的 人

1
Ah sì. Che oltre a vi's %comando che salta alla corrispondente parentesi graffa / parentesi / staffa. Simpatizzo. Mi manca viil %comando durante la programmazione in Python.
Celada,

8
Hai provato il plugin matchit vim? Supporta il% jump per if / fi in bash e molti altri blocchi in molte altre lingue. Vedi qui - vim.org/scripts/script.php?script_id=39
amisax,

@AmitKumar grazie per il suggerimento. Darò un occhiata!
Celada,

9

Forse questo è più facile per gli occhi:

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

A parte questo, abituati. Usa gli idiomi della lingua.


1
Ma perdi il bashismo solitamente non necessario e usa solo un set di parentesi.
Josip Rodin,

5

Quanto segue è vicino a lì. E strano.

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

Personalmente non mi è mai piaciuto il ...

if true; then
more;fi

... forma me stesso. Mi piace quando le parole di controllo portano . Mi è sempre sembrato strano che la ...;thenforma prevalente fosse nata.

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

È quasi del tutto opposto alla tua richiesta, ma è un altro modo per farlo. Puoi anche virare qualsiasi reindirizzamento desiderato sulla filinea secondo necessità e si applicheranno all'intero blocco.


Questa forma prevalente sembra essere solo un'altra incarnazione del comune if(...) {, ovvero lasciare una parentesi aperta sulla stessa linea dei iflinguaggi simili al C.
Ruslan,

@Ruslan - Forse - ma la linea in realtà non fa alcuna differenza in C, vero?
Mikeserv,

Giusto, ma nemmeno l'interruzione di linea fa la differenza nella shell, vero? La condizione dopo punto e virgola fa già in modo che l'interprete cerchi la continuazione del ifcomando, anche se sulla riga successiva.
Ruslan,

@Ruslan - sì - devi usare il ;delim in quel caso. È per questo che lo fanno.
Mikeserv,

Usando la :shell incorporata in questo modo, proprio così una riga di codice potrebbe essere più vicina al byte alla sintassi C, non dovrebbe essere incoraggiata in alcun modo.
Josip Rodin,

0

Ecco un modo:

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

è equivalente a:

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

Come afferma nella domanda, vuole parentesi . Mettine un po ' {...}intorno a echo "found", e poi andrai nella giusta direzione.
Peter

-2

Uso sempre:

if (code); then
   code;
fi

Probabilmente non è esattamente quello che vuoi, ma è un po 'più c.


2
Ciò provoca una subshell, riducendo le prestazioni.
Sarà il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.