Linux中的嵌套变量替换和预定义BASH变量 - 第11部分

最后两篇关于BASH Shell的文章,在这里我们详细讨论了变量,我们的读者高度赞赏。 我们作为youcl-团队非常热衷于为您提供最新的,向上的最新和盖在细节相关的主题。 此外,我们总是试图触及相应主题的主要观点。

Shell脚本中的嵌套变量

这里是最后一篇关于Linux变量的文章,在关闭本主题之前,我们将看到在Shell中定义的变量替换和变量。

Bash在真正执行命令之前执行变量替换。 Linux Bash Shell在执行命令之前搜索所有的'$'符号,并将其替换为variable的值。 Bash变量替换的过程只执行一次。 如果我们有嵌套变量怎么办?

注意 :我们的意思是嵌套变量,变量内声明的变量。 让我们在下面的例子中看到上面的场景。

声明一个只读和可执行变量,如下所示。

avi@localhost:~$ declare -rx Linux_best_website="www.youcl.com"

检查存储的变量的值。

avi@localhost:~$ printf "%s" "$Linux_best_website" 
www.youcl.com

现在声明另一个变量,它又是只读和可执行的。

avi@localhost:~$ declare -rx Linux_website="Linux_best_website"

现在的情况是,我们定义了两个变量。

'Linux_best_website',其值为“www.youcl.com”
和“Linux_website”,其值为“Linux_best_website”

如果我们运行下面的单行命令,会有什么结果?

avi@localhost:~$ printf "%s" "$Linux_website"

它应先更换变量'$ Linux_website“,值为”Linux_best_website“,然后”$ Linux_best_website“又是一个变量,它的值是”www.youcl.com“。 所以运行下面的命令的最终输出应该是。

avi@localhost:~$ printf "%s" "$Linux_website" 
www.youcl.com

但不幸的是,这不是这种情况,我们得到的输出Linux_best_website。

原因? 对! Bash只替换变量的值一次。 对于复杂的脚本和程序,我们需要频繁地替换变量以及需要不止一次地替换变量呢?

这里谈到的命令' 的eval“它执行变量替换不是在一个脚本一次更多额外的工作。 这里有一个例子,使整个工作像玻璃一样清晰。

声明变量x,它的值是10。

avi@localhost:~/Desktop$ declare x=10

检查变量x的值,我们刚刚定义。

avi@localhost:~/Desktop$ echo $yx
x10

声明一个变量y,它的值是X。

avi@localhost:~/Desktop$ declare y=x

检查变量y的值,我们刚刚定义。

avi@localhost:~/Desktop$ echo $y 
x

下面是BASH一次变量替换的问题,不进行额外一轮变量替换。 我们使用' 的eval“命令来解决这个问题。

avi@localhost:~/Desktop$ eval y=$x

现在检查的变量'y'的价值。

avi@localhost:~/Desktop$ echo $y 
10

欢呼! 这个问题是固定的,' 的eval'命令赢得了比赛:)

更何况,' 的eval'命令是在大型脚本程序非常有帮助的,是一个非常方便的工具。

这个帖子的最后但不是最少的部分是BASH预定义变量。 没有! 不要惊讶看到这个列表。 你在开始编写脚本之前不需要记住整个列表,除了少数几个。 作为学习过程的一部分,我们提供BASH预定义变量List。

没有。 BASH VARIABLE 结果
1 auto_resume 处理已停止作业的命令完成。
2 BASH PATH的shell。
3 BASH_ENV 显示配置文件的名称
4 BASH_VERSION 显示Bash的版本
5 BASH_VERSINFO 显示详细的版本信息。
6 BASH_VERSINFO [0] 主要版本号(发行版)。
7 BASH_VERSINFO [1] 次要版本号(版本)。
8 BASH_VERSINFO [2] 补丁级别。
9 BASH_VERSINFO [3] 构建版本。
10 BASH_VERSINFO [4] 发布状态(例如,beta1)。
11 BASH_VERSINFO [5] MACHTYPE的值。
12 CDPATH 用冒号分隔的目录列表。
13 标准输出的每行字符数。
14 EUID 当前用户的用户ID。
15 FCEDIT fc命令的默认文本编辑器。
16 FUNCNAME 乐趣的名字
17 用户是其成员的组。
18 HISTFILE 包含命令历史记录的文件。
19 您的主目录的名称。
20 线 标准输出上的水平线数。
21 邮件 要检查传入邮件的文件的名称
22 OSTYPE 操作系统的名称。
23 OLDPWD 上一个工作目录
24 PWD 当前工作目录
25 随机 打印随机数
26 贝壳 首选shell使用
27 时间格式 time命令的格式。
28 UID 当前用户的ID

有一个庞大的预定义BASH变量列表。 我们试图产生一个最常用的列表。

目前为止就这样了。 我会再次在这里与另一个有趣的文章。 直到那时敬请关注,并连接到youcl。 不要忘记在下面的评论部分向我们提供您的宝贵反馈。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏