假设这样一个简单的sh文件:
#!/bin/bash
a=
b=${a:- ; 456}
echo $b
使用bash执行的时候,bash的词法分析、语法分析、以及执行过程是怎样的?
比如:b=${a:- ; 456}
这一行,究竟拆分成几个单词?以及变量扩展后的执行过程?
关于bash分词、以及变量扩展的规则有一些困惑。多谢解答!
参考文章:
bash手册中文版
Bash命令行处理
问题补充:
b=${a:- ; 456}
是分割为 以下5个单词吗?单词1: b=${a:-
;单词2:空格
;单词3:分号
;单词4:空格
;单词5:456}
是这样吗?如果不是,第一步分解成哪几个单词?${
开始的 parameter expansion 是有特殊处理的。其中两个匹配的大括号之间的内容不会被分开。
Parameter Expansion
The `$' character introduces parameter expansion, command substitution, or arithmetic expansion. The parameter name or symbol to be expanded may be enclosed in braces, which are optional but serve to protect the variable to be expanded from characters immediately following it which could be interpreted as part of the name.
When braces are used, the matching ending brace is the first `}' not escaped by a backslash or within a quoted string, and not within an embedded arithmetic expansion, command substitution, or parameter expansion.
sequenceDiagram
participant L as 词法分析器
participant S as 语法分析器
participant V as 变量扩展和执行
participant O as 输出结果
L->>S: 分析脚本
S->>V: 解析语句
V->>O: 执行命令
O-->>L: 输出结果
+-------------+ +-------------+ +------------------+ +-----------+
| 词法分析器 | --> | 语法分析器 | --> | 变量扩展和执行 | --> | 输出结果 |
+-------------+ +-------------+ +------------------+ +-----------+
| b=${a:- ; 456} --> b=${a:- ; 456} --> b=; 456 --> | ; 456 |
+-------------+ +-------------+ +------------------+ +-----------+
本文向大家介绍linux下执行shell命令方法简介,包括了linux下执行shell命令方法简介的使用技巧和注意事项,需要的朋友参考一下 linux下执行shell命令有两种方法 在当前shell中执行shell命令 在当前shell中产生一个subshell,在subshell中执行shell命令 1.在当前shell中执行shell命令 主要就是在命令行中通过交互方式方式直接输入shel
问题内容: 我仍在尝试掌握如何运行linux或Windows shell命令并在node.js中捕获输出的细节。最终,我想做这样的事情… 重要的一点是必须对全局范围的变量(或对象)可用。我尝试了以下功能,但是由于某种原因,我被打印到控制台了。 我很难理解代码在哪里突破了…该模型的非常简单的原型可以工作… 有人可以帮助我了解为什么有效,但是无效吗?FWIW,我需要使用,因为缓冲区限制为200KB。
本文向大家介绍java执行Linux命令的方法,包括了java执行Linux命令的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java执行Linux命令的方法。分享给大家供大家参考。具体实现方法如下: 其中参数 cmd 为Linux命令。每次只能执行一条命令。 1.Java Runtime.exec()注意事项: ① 永远要在调用waitFor()方法之前读取数据流 ② 永远要先从
我有一个案例,我想问我可以解决与Spring壳。我有一个Main.jar应用程序,它有几个部署在Wildly服务器上的Spring任务。在我的例子中,我不能停止或重新部署main.jar,因为必须不停地提供服务。
本文向大家介绍Ruby中执行Linux shell命令的六种方法详解,包括了Ruby中执行Linux shell命令的六种方法详解的使用技巧和注意事项,需要的朋友参考一下 在Ruby中,执行shell命令是一件不奇怪的事情,Ruby提供了大概6种方法供开发者进行实现。这些方法都很简单,本文将具体介绍一下如何在Ruby脚本中进行调用终端命令。 exec exec会将指定的命令替换掉当前进程中的操作,
telnet 6379命令是怎么执行的?