我将术语“参数扩展”(又名“变量扩展”)理解为总括术语一般而言,特别是 Bash 中的几个不相关的 shell 脚本操作,例如:
- 变量替换。
- 如果同一行中有 2 个或多个值,则行分割。
- 通配特定范围的变量。
也许还有更多。
如果我正确理解这个术语背后的哲学,我们将变量从只是一个变量“扩展”为一个更具影响力的数据流(例如,替换值) - 现在它已扩展为一个已完成某些操作的变量。
我的问题:
一般来说,我对术语的理解是否足够准确?在这个总括术语下是否还有其他操作需要在答案中提及?
答案1
参数扩展也称为变量扩展,是用参数的值替换形式的句法结构,可能通过应用修饰符进行处理。$parameter
${parameter}
当 shell 读取命令行时,它会通过几个明确定义的步骤对其进行处理,例如将行拆分为单词、执行多种扩展(其中参数扩展只是其中一种)以及应用任何重定向。例如,Bash shell 首先会将行分割成单词。然后它将按从左到右的顺序执行大括号扩展、波形符扩展、参数和变量扩展、算术扩展、命令替换和进程扩展,然后是最终的单词分割和路径名扩展。
我不明白你所说的“可变打印”是什么意思。
发生了 Globbing,或者 Bash 文档更喜欢称之为“路径名扩展”的情况后变量扩展; shell 检查命令行上的每个单词是否存在字符*
、?
和[
, 如果找到其中任何一个,则认为该单词是一个模式,并将其替换为匹配文件列表,具体取决于某些配置选项。
有关详细信息,请参阅 shell 的手册页;例如,对于 Bash,您可以阅读手册页, 这参考手册, 这高级脚本编写指南和许多其他材料。
答案2
据我了解,不存在变量扩展这样的东西。
有变量和shell(参数)扩展(参见这里)。
变量是一个字符串或数字,您可以通过为其指定名称来引用它:
myVariable=2
Shell 参数扩展是 shell 获取输入并在执行之前对其应用某些规则的过程。所以同时:
echo $myVariable
不是有效的执行命令,因为 bash“知道”当它看到 $ 后跟一些文本时,它需要引用其变量列表来找出 $myVariable 的当前值实际上是 2;只有这样你才应该执行:
echo 2
理解 shell 扩展的整个过程其实就是理解 bash 用于扩展某些语法的一组规则,以及在使用双引号 ("")、单引号 ('') 或反引号 (``) 时如何修改这些规则。
我建议仔细阅读相关部分bash 参考手册以及在终端的一些练习。