什么是shell编程中的变量替换

0 shell variable-substitution

这个问题非常基础,我不仅为自己问这个问题,也为其他看到变量替换一词并有以下想法的新人问这个问题:

据我了解,术语变量替换描述了“将变量的值替换为另一个值”,但我怀疑这是正确的。
我想知道为什么这个操作需要一个特殊的术语,而不是仅仅说“通过在文本编辑器中手动编辑来更改变量的值?

什么是shell 编程中的变量替换概念,如果您知道答案,请举例说明它在您的工作中使用了哪些类型的操作。

Gil*_*il' 6

将给定变量的值替换为另一个值。

这种描述在几个方面是错误的。变量替换用它的替换变量的名称(加上一些语法上的错误)。此外,它不是“在”变量中运行,而是在命令中运行。命令可以是设置变量值的命令,但这只是众多情况中的一种。

例如,该命令echo $foo显示变量的值。源代码包含$foo,对应的输出包含变量的值foo

这被称为“变量替换”的原因是外壳通过一系列字符串(和字符串列表)的转换进行操作。例如(简化),请考虑命令ls -l $dir/*.$ext. 为了评估它,有几件事会依次发生:

  1. shell 开始解析命令并将其拆分为三个单词:ls,-l$dir/*.$ext
  2. 在第三个词中,shell 看到要执行的两个变量替换(这就是美元符号在此上下文中的含义)。说的价值dir/some/path和值exttxt,那么外壳重写$dir/*.$ext/some/path/*.txt。这是一种替换,因为每个变量的值都替换为美元名称语法。
  3. Shell 将通配符模式扩展/some/path/*.txt为匹配文件名的列表。
  4. shellls使用它计算的参数执行。

(语法$foo 不仅仅是替代变量的值,但这是另一回事。)

在大多数编程语言中,要获取变量的值,只需编写变量的名称。shell 是为交互使用而设计的;如果你写一个名字,它会被解释为一个文字字符串。这就是为什么取变量值的语法有一个额外的标记来表示“我想取一个变量的值”。

为什么此操作需要一个特殊术语,而只是说“通过在文本编辑器中手动编辑来更改变量的值?

变量替换与更改变量的值无关。改变一个变量的值是一种赋值

当然,赋值可以包含变量替换,就像任何其他命令一样。但是变量替换并不是专门为赋值而设计的。

此外,您无法使用编辑器更改变量的值。已经声明的变量在每个进程中都有一个值,它不是系统配置。您可以拥有设置变量初始值的配置文件,并且您可以使用编辑器来更改这些文件中的初始值,但之后该值可以更改。