标签: curly-braces

bash函数:将主体括在括号和括号中

通常,使用花括号来定义bash函数来包围正文:

foo()
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

今天在处理shell脚本时大量使用函数时,我遇到的问题是调用函数中调用的名称相同的变量,即那些变量是相同的.然后我发现可以通过将函数内部的局部变量定义为local来防止这种情况:local var=xyz.

然后,在某些时候,我发现了一个线程(使用括号而不是大括号定义bash函数体),其中解释了使用括号来定义函数同样有效:

foo()
(
    ...
)
Run Code Online (Sandbox Code Playgroud)

这样做的结果是函数体在子shell中执行,这有利于函数具有自己的变量范围,这允许我在没有本地的情况下定义它们.由于具有函数局部范围似乎更有意义,并且比所有变量全局更安全,我立即问自己:

  • 为什么默认情况下使用大括号括起函数体而不是括号?

但是,我很快发现了在子shell中执行该函数的一个主要缺点,特别是从函数内部退出脚本不再起作用,而是迫使我在整个调用树中使用返回状态(如果是嵌套函数).这引出了我的后续问题:

  • 使用括号而不是大括号是否还有其他主要缺点(*)(这可能解释为什么大括号似乎更受欢迎)?

(*)我知道(从异常相关的讨论中我偶然发现),有些人认为明确使用错误状态比从任何地方退出要好得多,但我更喜欢后者.

显然这两种风格都有其优点和缺点.所以我希望你们中有些经验丰富的bash用户可以给我一些一般指导:

  • 我何时应该使用花括号来包围函数体,何时可以切换到括号?

编辑:从答案的转移

谢谢你的回答,我的脑袋现在对此更加清晰.所以我从答案中得到的是:

  • 坚持传统的花括号,如果只是为了不混淆脚本的其他潜在用户/开发者(如果整个身体被括在括号中,甚至使用括号).

  • 花括号的唯一真正缺点是可以更改父作用域中的任何变量,尽管在某些情况下这可能是一个优点.通过将变量声明为可以很容易地避免这种情况local.

  • 另一方面,使用括号可能会产生一些严重的不良影响,例如搞乱退出,导致杀死脚本的问题以及隔离变量范围.

bash function curly-braces parentheses

27
推荐指数
3
解决办法
6489
查看次数

PHP源代码中的三个大括号

我刚刚从php.net下载了完整的PHP源代码(PHP 5.4.0 [tar.bz2]).它们通常使用三个大括号,如下所示(以下代码片段从ext/ctype/ctype.c中提取.)

/* {{{ proto bool ctype_digit(mixed c)
   Checks for numeric character(s) */
 static PHP_FUNCTION(ctype_digit)
 {
  CTYPE(isdigit);
 }
/* }}} */
Run Code Online (Sandbox Code Playgroud)

有没有人知道为什么他们一起使用这三个大括号?

php vim folding curly-braces

23
推荐指数
1
解决办法
2104
查看次数

为什么类内初始值设定项只能使用=或{}?

类内初始值设定项(C++ 11特性)必须用花括号括起来或跟在=符号后面.它们可能未在括号内指定.

这是什么原因?

c++ initializer curly-braces c++11

23
推荐指数
1
解决办法
1058
查看次数

C#String.Format,带有Curly Bracket in string

可能重复:
在String.Format中转义大括号'{'

c#有一个String.Format方法,允许您格式化字符串,但是使用标记插入params {0} {1}

我试图创建一个简单的json字符串,需要大括号在字符串中,因此它打破了格式化程序

String.Format("{ foo:'{0}', bar:'{1}' }", foo, bar);
Run Code Online (Sandbox Code Playgroud)

在括号之前添加一个逃脱没有帮助

抛出一个异常,说我的字符串格式不正确,有人知道怎么解决这个问题吗?

c# string-formatting curly-braces

22
推荐指数
2
解决办法
2万
查看次数

需要转义json字符串对象中的花括号吗?

此字符串是JSON对象/文件的一部分:

"Mask" : "{0}(CASE WHEN {1} = {2} THEN {3} ELSE 0 END) {4}"
Run Code Online (Sandbox Code Playgroud)

JSON会认识到这是标准JSON表示法的一部分还是我需要以某种方式逃避那些花括号?

如果是这样,如何在JSON中逃避花括号?

json escaping curly-braces

22
推荐指数
2
解决办法
2万
查看次数

如何修复对象和其他初始值设定项上的ReSharper缩进

我发现了这个问题的其他重复,但它们已经很老了,解决方案不适用于R#8,因为设置已经改变.

当我做匿名类型或对象初始化(任何类型的花括号缩进与内容),我希望它是BSD风格:

var test = new CustomType
{
    Prop1 = value1,
    Prop2 = value2,
};
Run Code Online (Sandbox Code Playgroud)

...并将R#选项/代码编辑/ C#/格式化样式/大括号布局/数组和对象初始值设置为"下一行(BSD样式)".但是,当我在添加一个新的大括号后按Enter键时,我仍然最终得到这个:

var test = new CustomType
           {
               Prop1 = value1,
               Prop2 = value2,
           };
Run Code Online (Sandbox Code Playgroud)

......我相信是白人的风格.

我需要做些什么才能让R#8不缩进初始化器的大括号?

c# resharper code-formatting curly-braces resharper-8.0

22
推荐指数
1
解决办法
2091
查看次数

在大括号中包装多个语句

Visual Studio 2010中是否有键盘快捷键(我也使用ReSharper 6.1),这将允许我用大括号包围选定的文本块?我尝试了"Surround With ..." (Ctrl + K,Ctrl + S),但我没有看到列表中的选项来选择花括号作为周围元素.这个的常见用例是我将有一个if语句,如下所示:

if (conditional)
    statement1;
// the rest of the program
Run Code Online (Sandbox Code Playgroud)

我会发现在if语句中需要执行一些额外的任务并添加它们:

if (conditional)
    statement1;
    statement2;
    statement3;
// the rest of the program
Run Code Online (Sandbox Code Playgroud)

然后,我记得我需要用花括号包装所有语句,代码应该看起来像这样:

if (conditional)
{
    statement1;
    statement2;
    statement3;
}
// the rest of the program
Run Code Online (Sandbox Code Playgroud)

我想要做的只是选择三个语句,然后点击快捷键将它们包装在花括号中.我实际上最终做的是将光标移动到条件之后的行的开头,然后键入{字符,然后删除}字符,ReSharper(无用)在{之后立即自动插入,然后将光标向下移动到结尾块的最后一个语句和输入}来完成块.

resharper curly-braces visual-studio-2010 curly-brackets

18
推荐指数
1
解决办法
3498
查看次数

定义数组时的花括号

关注以下代码:

int[] to = new int[] { text };
Run Code Online (Sandbox Code Playgroud)

我理解它试图定义一个整数数组,但花括号在数组定义中做了什么?

java arrays curly-braces

17
推荐指数
3
解决办法
2万
查看次数

PHP中的卷曲括号表示法

我正在阅读OpenCart的源代码,我在下面遇到了这样的表达.有人可以向我解释一下:

$quote = $this->{'model_shipping_' . $result['code']}->getQuote($shipping_address);
Run Code Online (Sandbox Code Playgroud)

在声明中,有一个奇怪的代码部分,
$this->{'model_shipping_' . $result['code']}
它有{},我不知道那是什么?它看起来像我的对象,但我不是很确定.

php curly-braces

16
推荐指数
2
解决办法
1万
查看次数

箭头功能中的卷曲括号

有人请解释以下内容:

我跟随丹阿布拉莫夫的讲座和做练习.

代码工作正常,但是当使用大括号编写以下特定函数时,测试失败**{ }**.

    case 'toggleTodo' :
        return (
            state.map( (one) => {
                oneTodo( one, action )
            })
        );
Run Code Online (Sandbox Code Playgroud)

相同的代码工作正常,没有花括号.

    case 'toggleTodo' :
        return (
            state.map( (one) => 
                oneTodo( one, action )
            )
        );
Run Code Online (Sandbox Code Playgroud)

这是JsBin.请参阅第31行.

javascript brackets curly-braces ecmascript-6 arrow-functions

16
推荐指数
2
解决办法
3122
查看次数