为什么下面的例子来自Arrow 的回复输出$var而不是3?
我单引号或反斜杠$var为'$var'or \$var,希望
$var将逐字传递到可执行程序的执行环境中/bin/echo,并且/bin/echo,var=3当发生参数扩展时应用环境变量$var。为什么在可执行程序的执行环境中不会发生参数扩展/bin/echo?笔记:
在原shell中,$var是单引号或反斜杠,所以在原shell的执行环境中不应该展开。
原来的shell去掉了周围的单引号或者反斜杠$var,然后把$var环境变量var=3传入到执行环境中运行/bin/echo,所以我认为参数扩展$var 应该发生在运行的执行环境中/bin/echo。
请注意,我使用set -x打印出跟踪信息,但无法弄清楚扩展后但执行前的实际结果。
谢谢。
tim$ unset var
$ set -x
tim$ var=3 /bin/echo '$var'
+ var=3
+ /bin/echo '$var'
$var
tim$ var=3 /bin/echo \$var
+ var=3
+ /bin/echo '$var'
$var
$ var=3 exec /bin/echo \$var | cat
+ cat
+ var=3
+ exec /bin/echo '$var'
$var
tim$ var=3 exec /bin/echo '$var' | cat
+ var=3
+ exec /bin/echo '$var'
+ cat
$var
Run Code Online (Sandbox Code Playgroud)
在每一种情况下,你要么是强引用,这会阻止变量的扩展;或转义$字符,这也使其不再是受扩展的变量。 /bin/echo并且cat不进行任何参数或变量扩展,因此管道不会导致这种情况发生。
| 归档时间: |
|
| 查看次数: |
132 次 |
| 最近记录: |