为什么每次运行一个命令时位置变量都没有改变

哈伊瓦

我正在学习shell脚本,并且遇到这种情况。

我们说位置变量是环境变量,但是为什么它们在每次执行命令时都不会改变。

看看这个

set v1set v2set v3set v4set
old=$#

#Just a random command
ls -l

new=$#

echo $old $new

它输出4 4如果环境变量是全局变量,为什么不是4 1,当我运行时ls -l,它应该具有更新的位置变量?

jm666

有趣的问题-您的观点很好。

为了理解它,您需要了解在运行任何命令(如)时会发生什么ls -l它与“变量已还原或类似”无关。

当您要运行任何命令时,

  1. bash FORKS本身分成两个相同的副本
  2. 一个副本(称为子级)将被所需的命令(例如ls -l替换为自己
  3. 此时,进程将获得正确的位置变量计数$#
  4. remerber-这在子进程中发生,第二个()进程对此一无所知
  5. 父母只是等到孩子完成为止(当然,HIS$#不会改变,因为对于父母而言,什么也没有发生-仅等待
  6. 当孩子(ls -l)完成后,父母继续奔跑-当然, $#没有理由改变...

ps:以上只是简单的解释。实际上,在分叉之后,它们不是完全相同,而是一个数字不同-父级获得孩子的进程号,这个核子的孩子具有“ 0”

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么每次运行循环时都没有得到相同的结果?

为什么每次通过此循环都没有得到一个封闭的XML节点?

为什么每次递归后我的变量都没有增加?

为什么我的 JLabel 在每次点击时都没有更新?

为什么在for循环批处理脚本的每次迭代中都没有重新定义变量?

一个mysql请求,什么都没有发生?

Perl:当我从命令行运行“ perl”时,什么都没有发生

为什么除了最后一帧外,在拆卸的每一帧都没有调用命令

当我尝试在表中添加检查约束时,什么都没有改变

为什么子图中有一个多余的图,我在任何地方都没有提到

在Spyder上使用Altair时,为什么我的两个图形都没有显示?

在外部python命令在Java中完成运行之前,什么都没有发生

制作一个JQuery计算器,更改innerHTML但什么都没有发生

如果列中有一个值,如何显示一个值,如果什么都没有,如何显示一个空值?

为什么LongListSelector selectedItem什么都没有?

为什么$ 1输出什么都没有?

为什么所有的图像都没有离开屏幕,因为我想创建一个图像滑块?简而言之,为什么图像没有走出屏幕?

为什么所有 3 个打印都没有显示?

当我运行 engine.scala 时什么都没有发生

为什么两次使用grep时都没有显示输出?

为什么在python中阅读文本时尾部都没有?

为什么两个标签都没有更新?

为什么整个部分都没有显示背景

为什么我的整个LineairLayout都没有显示?

为什么在每行之后都没有打印?

为什么一切都没有在 django 管理站点中翻译

为什么每次读取文件行时我的对象都没有存储到数组中?爪哇

对多个变量进行模糊合并(除一个以外的所有变量,都没有拼写错误)

为什么在运行 npm update 时所有节点包都没有更新到最新版本?