Чи можна замінити дужки "тоді"?


10

Я вперше навчився кодувати Cмовою та користуватися

if ( code )
then 
code
fi

мені дуже важко читати свій код (не питайте, чому). Чи є заміна then?

Щось на зразок цього:

if ( code ) {
 code
}
fi

Відповіді нижче можуть допомогти, але якщо я можу додати, це дуже гарна ідея звикнути до синтаксису різних мов. Якщо ви хочете знайти роботу в розробці програмного забезпечення, або девепсис або як систематик для цього, вам потрібно буде навчитися розпізнавати та використовувати багато різних синтаксисів. Ви будете більш цінними для будь-якого роботодавця, будучи максимально гнучким.
OldTimer

Відповіді:


21

Замінника немає, але ви можете використовувати обидва, якщо вам дійсно потрібні брекети:

if true ; then {
    something
} fi

Тут використовується непотрібна явно обмежена командна група як тіло thenблоку. Будь-які команди в дужках просто виконуватимуться в поточній оболонці під час виконання then, точно так, як ніби дужки не були там.

Я б не рекомендував цей стиль взагалі або для коду, який потрібно буде прочитати комусь іншому, але він дає вам потрібні дужки, і це зробить трюк, якщо ви використовуєте редактор, який вимагає блокованих блоків або щось схоже.


Ось ще один, який "не рекомендувати рекомендувати" - підкреслює галор: { if { [[ a == aa ]];};then { echo yes;};else { echo no;}; fi;}- в основному, коли ви використовуєте bashдостатньо, стандартний синтаксис стає достатньо звичним, так що це не велика проблема.
Пітер.О

15

Ви , здається, шукає оболонки C ( csh, tcsh, і т.д. ...). Майте на увазі, що експерти рекомендують проти цього програмування .

Я не впевнений, чи є частина, яку ви вважаєте непривабливою, це факт, який thenзнаходиться у наступному рядку? Якщо так, подумайте про наступний стиль:

if condition; then
    stuff
fi

Я повинен визнати , що імена правопис виписки тому , як fiдля ifі esacдля case(але не elihwдля while!) Начебто Quirky. Але це стандартна оболонка Bourne, самий портативний синтаксис оболонки, який ви можете використовувати.


Дякую за вашу відповідь - я не вважаю thenнепривабливим, просто мій редактор виділить відповідні {}пари, і це корисно, коли у мене є якась помилка, тому що я можу легко побачити всі мої ifзаяви і побачити, чи щось пішло не так .
智障 的 人

1
Ага так. Команда плюс vi, %яка переходить на відповідні дужки / дужки / дужки. Я співчуваю. Я сумую за vi«s %команди при програмуванні на Python.
Селада

8
Ви спробували плагін matchit vim? Він підтримує стрибок% for if / fi в bash та безліч інших блоків на багатьох інших мовах. Дивіться тут - vim.org/scripts/script.php?script_id=39
amisax

@AmitKumar дякую за пораду. Я буду дивитись!
Селада

9

Можливо, це простіше для очей:

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

Крім цього, просто звикніть. Використовуйте мовні ідіоми.


1
Але втрачайте зазвичай непотрібний башизм і просто використовуйте один набір дужок.
Йосип Родін

5

Наступне поруч. І дивно.

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

Мені особисто ніколи не подобалося ...

if true; then
more;fi

... формувати себе. Мені подобається, коли контрольні слова ведуть . Мені завжди здавалося дивним, що панівна ...;thenформа взагалі виникала.

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

Це майже повністю протилежно вашому запиту, але це ще один спосіб зробити це. Ви також можете встановити будь-які потрібні переадресації до fiрядка за потребою, і вони будуть застосовуватися до всього блоку.


Ця переважаюча форма здається лише черговим втіленням загального if(...) {, тобто залишаючи відкриваючу дужку на тій же лінії, що і ifв мовах подібних С.
Руслан

@Ruslan - Можливо, - але лінія насправді взагалі не має ніякої різниці в C, чи не так?
mikeserv

Правильно, але ні перерив лінії не змінює оболонку, чи не так? Точка з комою після умови вже змушує інтерпретатора шукати продовження ifкоманди, навіть якщо в наступному рядку.
Руслан

@Ruslan - так - ;у цьому випадку ти повинен використовувати делім. Ось чому вони так і роблять.
mikeserv

Використовуючи :оболонку, побудовану таким чином, лише так, щоб рядок коду міг бути на байт ближче до синтаксису С, жодним чином не слід заохочувати.
Йосип Родін

0

Ось спосіб:

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

еквівалентно:

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

Як він заявляє у питанні, він хоче дужки . Покладіть трохи {...}навколо echo "found", і тоді ви будете прямувати в правильному напрямку.
Пітер.О

-2

Я завжди використовую:

if (code); then
   code;
fi

Напевно, не зовсім те, що ви хочете, але це трохи більше, як на к.


2
Це спричиняє нижню частину, знижуючи продуктивність.
Чи буде
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.