这个问题非常基本,我不仅向自己问这个问题,还向其他看到该术语的新人问这个问题变量替换并有以下想法:
据我了解,这个词变量替换描述了“用一个变量的值替换另一个变量的值”,但我怀疑这是正确的。
我想知道为什么此操作需要一个特殊术语,而不只是说“通过在文本编辑器中手动编辑变量来更改变量的值?”
什么是变量替换shell 编程中的概念,如果您知道答案,请给出一个实际示例,说明它在您的工作中使用了哪些类型的操作。
答案1
将给定变量的值替换为另一个变量的值。
这种描述在很多方面都是错误的。变量替换取代姓名变量(加上一些语法错误)的价值。此外,它不是在变量“中”操作,而是在命令中操作。该命令可以是设置变量值的命令,但这只是众多情况中的一种。
例如,该命令echo $foo
显示变量的值。源代码包含$foo
,并且相应的输出包含变量的值foo
。
这被称为“变量替换”的原因是 shell 通过一系列字符串(和字符串列表)转换来操作。例如(简化),考虑命令ls -l $dir/*.$ext
。为了评估它,需要按顺序发生几件事:
- shell 开始解析命令并将其拆分为三个单词:
ls
、-l
和$dir/*.$ext
。 - 在第三个单词中,shell 看到要执行两个变量替换(这就是美元符号在此上下文中的含义)。假设
dir
is的值和is/some/path
的值,则 shell 重写为.这是一个替换,因为每个变量的值都替换了美元名称语法。ext
txt
$dir/*.$ext
/some/path/*.txt
- shell 将通配符模式扩展
/some/path/*.txt
为匹配文件名的列表。 - shell
ls
使用计算出的参数执行。
(语法$foo
不只是替换变量的值但这是另一个故事了。)
在大多数编程语言中,要获取变量的值,只需编写变量的名称即可。 shell 是为交互式使用而设计的;如果你写一个名字,它会被解释为一个文字字符串。这就是为什么获取变量值的语法有一个额外的标记来表示“我想获取变量的值”。
为什么此操作需要一个特殊术语,而不只是说“通过在文本编辑器中手动编辑变量来更改变量的值?”
变量替换与更改变量的值无关。改变变量的值是任务。
当然,像任何其他命令一样,赋值可以包含变量替换。但变量替换并不是专门为赋值而设计的。
此外,您无法使用编辑器更改变量的值。已声明的变量在每个进程中都有一个值,它不是系统配置。您可以使用配置文件来设置最初的变量的值,您可以使用编辑器更改这些文件中的初始值,但之后该值可以更改。