扩展变量和打印变量(如使用 echo 或 printf)有什么区别?

Arc*_*ing 2 shell variable

扩展变量和打印变量(如echoprintf)有什么区别?

如果我理解正确,打印一个变量(它的值)只是扩展它的一个例子。也许代入它的值也是一个例子。

更新

在解释差异之前,请用您自己的话给出术语“变量扩展”的简短定义。

Ste*_*itt 7

展开和打印是两种不同的操作。扩展涵盖了shell 处理命令多个阶段:在 Bash 中,大括号扩展({1..5}变成1 2 3 4 5)、波浪号扩展(~user变成/home/user适当的)、shell 参数扩展(${variable}用变量的值替换)、命令替换、算术扩展、进程替换、分词和文件名扩展。(另请参阅POSIX 字扩展。)

对所有这些使用术语扩展的一种可能解释是,它们都可能导致命令扩展,变得更长(这是在 C 中开发 shell 时特别关注的问题)。

在您的情况下,扩展是参数扩展:

echo "${variable}"
Run Code Online (Sandbox Code Playgroud)

变成

echo "value"
Run Code Online (Sandbox Code Playgroud)

在你所说的变量替换之后,然后

echo value
Run Code Online (Sandbox Code Playgroud)

引用删除后(稍微简化),并echo进行打印。碰巧echoprintf是 shell 内置的,所以只涉及 shell,但是步骤是分开的,并且情况与外部命令相同。

所以打印不是扩展的特例;但是,替换(如您链接的问题中所示)是,有关详细信息,请参阅Bash 手册