是否可以将“ then”替换为括号?


10

我首先学习了如何用一种C语言进行编码,以及如何使用

if ( code )
then 
code
fi

这使我很难阅读我的代码(不要问为什么)。有替代品then吗?

像这样:

if ( code ) {
 code
}
fi

下面的答案可能会有所帮助,但是如果我要补充的话,习惯使用不同语言的语法是一个非常好的主意。如果您想找到从事软件开发,开发或用作系统管理员的工作,则需要学习识别和使用许多不同的语法。尽可能地灵活,您将对任何雇主都更具价值。
OldTimer

Answers:


21

没有替代方法,但是如果您确实需要大括号,则可以同时使用两者:

if true ; then {
    something
} fi

它将不必要的显式支撑命令组用作then块的主体。花括号中的任何命令都将在then运行时在当前shell中执行,就像花括号不存在一样。

我一般不会推荐这种样式,也不会为其他人需要阅读的代码推荐这种样式,但是它确实为您提供了所需的花括号,并且如果您使用的是需要花括号或这样的事情。


这是另一个“不值得推荐”的选项–大括号:{ if { [[ a == aa ]];};then { echo yes;};else { echo no;}; fi;}–基本上,当您使用bash足够时,标准 语法就足够熟悉了,因此没有太大的问题。
Peter.O 2015年

15

你似乎在寻找的C shellcshtcsh,等...)。请注意,专家建议您不要进行编程

我不确定您认为不吸引人的部分是否是以下事实then?如果是这样,请考虑使用以下样式:

if condition; then
    stuff
fi

我必须承认,像fifor ifesacfor case(但不是elihwfor while)这样的拼写声明名称倒是有点古怪。但这是标准的Bourne shell,是您可以使用的最可移植的shell语法。


谢谢您的回答-我没有发现then吸引人的地方,只是我的编辑器将突出显示对应的{}对,这在出现某种错误时非常有用,因为这样我就可以轻松查看所有if语句并查看是否出错。
智障的人2015年

1
是啊。该plus vi%命令跳转到匹配的花括号/括号/括号。我同情。使用Python进行编程时,我想念vi%命令。
Celada 2015年

8
您是否尝试过matchit vim插件?它支持bash中if / fi和许多其他语言中的许多其他块的%跳转。看到这里-vim.org/scripts/script.php?script_id=39
amisax 2015年

@AmitKumar感谢您的提示。我来看一下!
Celada 2015年

9

也许这在眼睛上更容易:

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

除此之外,请习惯它。使用语言的习惯用法。


1
但是要失去通常不必要的bashism,而只需使用一组括号即可。
Josip Rodin 2015年

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(...) {,即在与ifC语言类似的行中保留开括号。
Ruslan 2015年

@Ruslan-也许-但是该行实际上在C语言中根本没有任何区别,是吗?
mikeserv

是的,但是换行符对外壳没有任何影响,对吗?条件后的分号已经使解释器寻找if命令的继续,即使在下一行也是如此。
Ruslan 2015年

@Ruslan-是的- ;在这种情况下,您必须使用delim。这就是为什么他们这样做。
mikeserv

使用这样的:内置shell,只是这样一行代码就可以在字节上更接近于C语法,无论如何都不应鼓励。
Josip Rodin 2015年

0

这是一种方法:

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

等效于:

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

正如他在问题中指出的那样,他想要方括号{...}在周围放一些echo "found",然后您将朝着正确的方向前进。
Peter.O 2015年

-2

我一直使用:

if (code); then
   code;
fi

可能不完全是您想要的,但是有点像c。


2
这会导致子外壳,从而降低性能。
2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.