Ste*_*own 55 shell bash quoting
在阅读如何设置时grub,我发现一篇文章声称我需要使用以下两种语法之一,
echo \(hd0,0\) >> /boot/grub/grub.conf
Run Code Online (Sandbox Code Playgroud)
或者
echo '(hd0,0)' >> /boot/grub/grub.conf
Run Code Online (Sandbox Code Playgroud)
因为,在命令行中,括号以一种特殊的方式被解释。括号有什么特别之处?它们是如何解释的?
jw0*_*013 58
括号表示 bash 中的子shell。引用man bash页面:
(list) list is executed in a subshell environment (see COMMAND
EXECUTION ENVIRONMENT below). Variable assignments and builtin
commands that affect the shell's environment do not remain in
effect after the command completes. The return status is the
exit status of list.
Run Code Online (Sandbox Code Playgroud)
其中 alist只是一个正常的命令序列。
这实际上是非常便携的,而不是特定的bash。该POSIX shell命令行语言规范具有对下面的描述(compound-list)语法:
在子shell环境中执行复合列表;请参阅外壳执行环境。列表结束后,影响环境的变量赋值和内置命令将不再有效。
mar*_*ark 17
括号之间嵌入的命令列表作为子shell 运行。
子外壳中的变量在子外壳中的代码块之外不可见。父进程和启动子 shell 的 shell 无法访问它们。这些实际上是局部变量。
参见Linuxtopia - 第 20 章。 Subshell
| 归档时间: |
|
| 查看次数: |
80394 次 |
| 最近记录: |