使用parens会将命令放在并非总是您想要的子外壳中。或者,使用花括号:
command && echo "Ok, continuing" || { echo "Check internet connection"; exit 1; }
这里的窍门是,与括号不同,括号中的最终命令必须后跟;
。
大括号是命令的有效参数。例如,以下是花括号作为以下参数的参数echo
:
$ echo }
}
因此,如果外壳看到:
{ command1; command2 }
shell将command1解释为没有参数,而将command2解释为只有一个由字符组成的参数}
。大括号}
仅在分号或换行符之后才被解释为结束分组。要进行上述工作:
{ command1; command2; }
{...}
和(...)
观察到以下设置x
为10,但是在echo
命令运行之前忘记了该设置:
$ x=0; false || ( echo Hello; x=10 )
Hello
$ echo $x
0
相比之下,使用花括号x=10
可以记住的设置:
$ x=0; false || { echo Hello; x=10; }
Hello
$ echo $x
10
区别在于,子外壳程序完成后,子外壳程序中的变量分配无法继续存在。
来自man bash
:
(列表)
该列表在子外壳程序环境中执行(请参见下面的“命令执行环境”)。在命令完成后,影响外壳环境的变量分配和内置命令将保持无效。返回状态是列表的退出状态。
{ 列表; }
list仅在当前的shell环境中执行。列表必须以换行符或分号终止。这称为组命令。返回状态是列表的退出状态。请注意,与元字符(和)不同,{和}是保留字,并且必须出现在允许识别保留字的位置。由于它们不会造成单词中断,因此必须使用空格或其他shell元字符将它们与list分开。
[增加了重点]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句