我正在学习shell脚本,并且遇到这种情况。
我们说位置变量是环境变量,但是为什么它们在每次执行命令时都不会改变。
看看这个
set v1set v2set v3set v4set
old=$#
#Just a random command
ls -l
new=$#
echo $old $new
它输出4 4
。如果环境变量是全局变量,为什么不是4 1
,当我运行时ls -l
,它应该具有更新的位置变量?
有趣的问题-您的观点很好。
为了理解它,您需要了解在运行任何命令(如)时会发生什么ls -l
。它与“变量已还原或类似”无关。
当您要运行任何命令时,
bash
FORKS本身分成两个相同的副本ls -l
)替换为自己$#
$#
不会改变,因为对于父母而言,什么也没有发生-仅等待ls -l
)完成后,父母继续奔跑-当然,他 $#
没有理由改变...ps:以上只是简单的解释。实际上,在分叉之后,它们不是完全相同,而是一个数字不同-父级获得孩子的进程号,这个核子的孩子具有“ 0”
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句