ala*_*min 9 shell bash zsh shell-script
在开始 Linux 编程一书中。有一节是关于Statement Block 的。在该部分中,解释如下所示。
如果您想在只允许一个语句的地方使用多个语句,例如在 AND 或 OR 列表中,您可以通过将它们括在大括号 {} 中以形成语句块来实现。例如,请参阅以下代码:
get_confirm && {
grep ?v "$cdcatnum" $tracks_file > $temp_file
cat $temp_file > $tracks_file
echo
add_record_tracks
}
Run Code Online (Sandbox Code Playgroud)
请解释代码在语句块中是如何执行的...
Kus*_*nda 17
中的代码{ ... }完全按照没有花括号的方式执行,除了现在它依赖于get_confirm.
如果get_confirm以零退出状态(“成功”)退出,则块执行,否则不执行。
它相当于
if get_confirm; then
# the contents of the block goes here
fi
Run Code Online (Sandbox Code Playgroud)
(我觉得更好看)
这本书的例子恕我直言,不是一个常见用法的好例子{ ... }。一个更好的例子是
{ echo 'hello world'; date; } >file
Run Code Online (Sandbox Code Playgroud)
它使用单个重定向将{ ... }块中两个命令的标准输出重定向到同一个文件。
这类似于(并且在本例中具有相同的效果)
( echo 'hello world'; date ) >file
Run Code Online (Sandbox Code Playgroud)
但是其中的语句在{ ... }与外壳相同的环境中( ... )执行,而中的语句在子外壳(单独的环境)中执行。
你可以看到不同之处
{ a=42; }; echo $a
Run Code Online (Sandbox Code Playgroud)
和
( a=1973 ); echo $a
Run Code Online (Sandbox Code Playgroud)
第一个将输出,42而第二个将不输出1973(分配发生在子外壳中,它不会影响外部环境)。
关于语法注意事项:截止}一的{ ... }块必须遵循一个换行符或;。 { echo 'hello' }无效,而{ echo 'hello'; }和
{
echo 'hello'
}
Run Code Online (Sandbox Code Playgroud)
是。