Czy można zastąpić „następnie” nawiasami?


10

Najpierw nauczyłem się kodować w Cjęzyku i używać

if ( code )
then 
code
fi

utrudnia mi czytanie kodu (nie pytaj dlaczego). Czy istnieje substytut then?

Coś takiego:

if ( code ) {
 code
}
fi

Poniższe odpowiedzi mogą pomóc, ale jeśli mogę dodać, bardzo dobrze jest przyzwyczaić się do składni różnych języków. Jeśli chcesz znaleźć zatrudnienie w tworzeniu oprogramowania, programistom lub jako administrator systemu, musisz nauczyć się rozpoznawać i używać wielu różnych składni. Będziesz bardziej wartościowy dla każdego pracodawcy, będąc tak elastycznym, jak to możliwe.
OldTimer

Odpowiedzi:


21

Nie ma substytutu, ale możesz użyć obu, jeśli naprawdę potrzebujesz aparatów ortodontycznych:

if true ; then {
    something
} fi

Wykorzystuje to niepotrzebną jawnie zbrojoną grupę poleceń jako bryłę thenbloku. Wszelkie polecenia w nawiasach zostaną wykonane w bieżącej powłoce po thenuruchomieniu, dokładnie tak, jakby nawiasy nie były dostępne.

Naprawdę nie polecałbym tego stylu ogólnie ani kodu, który ktoś inny będzie musiał przeczytać, ale daje ci nawiasy klamrowe, które chcesz, i zrobi to samo, jeśli używasz edytora, który wymaga wzmocnionych bloków lub coś w tym stylu.


Oto kolejna, która „nie jest godna polecenia” - nawiasy klamrowe: { if { [[ a == aa ]];};then { echo yes;};else { echo no;}; fi;}- w zasadzie, gdy używasz bashwystarczająco dużo, standardowa składnia staje się wystarczająco znajoma, więc nie stanowi większego problemu.
Peter.O

15

Wydaje się, że patrząc na powłoce C ( csh, tcsh, etc ...). Należy pamiętać, że eksperci odradzają to przy programowaniu .

Nie jestem pewien, czy to, co uważasz za nieprzyjemne, thenjest następujące: Jeśli tak, rozważ użycie następującego stylu:

if condition; then
    stuff
fi

Muszę przyznać, że nazwy instrukcji pisowni wstecz jak fifor ifi esacfor case(ale nie elihwdla while!) Są trochę dziwaczne. Ale to standardowa powłoka Bourne'a, najbardziej przenośna składnia powłoki, jakiej możesz użyć.


Dziękuję za odpowiedź - nie uważam za thennieprzyjemny, po prostu mój edytor podświetli odpowiednie {}pary, i jest to przydatne, gdy mam jakiś błąd, ponieważ wtedy mogę łatwo zobaczyć wszystkie moje ifstwierdzenia i sprawdzić, czy coś poszło nie tak .
人 的 ​​人

1
O tak. To polecenie plus vi, %które przeskakuje do pasującego nawiasu / nawiasu / nawiasu. Sympatyzuje. Tęsknię vi„s %komendy przy programowaniu w Pythonie.
Celada,

8
Próbowałeś już wtyczki matchit vim? Obsługuje skok% dla if / fi w bashu i wiele innych bloków w wielu innych językach. Zobacz tutaj - vim.org/scripts/script.php?script_id=39
amisax

@AmitKumar dzięki za wskazówkę. Zobaczę!
Celada,

9

Może to jest łatwiejsze dla oczu:

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

Poza tym, przyzwyczaj się do tego. Użyj idiomów języka.


1
Ale stracisz zwykle niepotrzebny bashizm i po prostu użyj jednego zestawu nawiasów.
Josip Rodin

5

Poniżej jest blisko. I dziwne.

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

Osobiście nigdy nie lubiłem ...

if true; then
more;fi

... formuję siebie. Podoba mi się, gdy prowadzą słowa kontrolne . Zawsze wydawało mi się dziwne, że ...;thenw ogóle powstała dominująca forma.

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

Jest to prawie całkowicie przeciwne do twojego żądania, ale jest to inny sposób, aby to zrobić. W firazie potrzeby możesz także przypiąć dowolne przekierowania do linii, które będą dotyczyć całego bloku.


Ta dominująca forma wydaje się być kolejnym wcieleniem pospolitego if(...) {, tj. Pozostawieniem otwierającego nawiasu klamrowego na tej samej linii, co ifw językach podobnych do C.
Ruslan

@ Ruslan - Być może - ale tak naprawdę linia C nie robi żadnej różnicy w C, prawda?
mikeserv

Zgadza się, ale podział linii nie ma znaczenia w powłoce, prawda? Średnik po warunku powoduje, że interpreter szuka kontynuacji ifpolecenia, nawet jeśli jest w następnym wierszu.
Ruslan

@ Ruslan - tak - ;w takim przypadku musisz użyć separatora . Właśnie dlatego.
mikeserv

Przy użyciu :wbudowanej powłoki w ten sposób, aby wiersz kodu mógł być bajtowo bliższy składni C, nie należy w żaden sposób zachęcać.
Josip Rodin

0

Oto sposób:

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

jest równa:

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

Jak stwierdza w pytaniu, chce nawiasów klamrowych . Umieść trochę {...}wokół echo "found", a wtedy będziesz zmierzać we właściwym kierunku.
Peter.O,

-2

Zawsze używam:

if (code); then
   code;
fi

Prawdopodobnie nie dokładnie to, czego chcesz, ale jest trochę bardziej podobny do c.


2
To powoduje podpowłokę, obniżając wydajność.
Czy
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.