免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: thinshootout

关于shell的IFS [复制链接]

论坛徽章:
0
发表于 2009-03-15 08:47 |显示全部楼层
学习了。

论坛徽章:
0
发表于 2009-03-16 08:37 |显示全部楼层
还是有些不明白,看来还是要好好的看书了

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2009-03-16 10:20 |显示全部楼层
原帖由 blackold 于 2009-3-14 17:20 发表


命令comand是可以使用var=value的,而且这也是var=value的目的,我们常用的LC_ALL=C command,就是让command在一个LC_ALL=C的环境中执行,而不是使用当前locale.



这样的话,我能理解点了

论坛徽章:
0
发表于 2009-03-16 12:51 |显示全部楼层
原帖由 lululau 于 2009-3-14 11:25 发表
A=B是传给子进程的一个环境,这个赋值对于当前进程是无效的
首先这个你用A=B command $A这种形式
在产生子进程之前,$A就被代换了,代换成了空值
再者,echo是shell的内建命令,不产生子进程

貌似有点懂了,这个应该是与bash的解释运行的顺序相关~~~

论坛徽章:
0
发表于 2009-03-16 13:58 |显示全部楼层
局部变量似乎还容易相通点,

不过说回来了, 你 A=B command , 这时候的command的环境变量 到底是只有 A 这个变量还是在之前的所有环境变量加上A这个变量。

如果是后者,不是也可以这样么。

A=B
command (run in A=B)
unset A

这样可以么?

论坛徽章:
0
发表于 2009-03-16 14:53 |显示全部楼层
原帖由 nhw_cs 于 2009-3-14 14:44 发表
a=b 与 echo 都是shell的内部功能, 也就是由shell本身实现的, 当然不产生所谓的子进程. 只有command 是外部应用程序时当前shell才产生子进程来执行command ( fork + exec )

  1. ip="192.168.0.1" ping $ip
  2. Usage: ping [-LRUbdfnqrvVaA] [-c count] [-i interval] [-w deadline]
  3.             [-p pattern] [-s packetsize] [-t ttl] [-I interface or address]
  4.             [-M mtu discovery hint] [-S sndbuf]
  5.             [ -T timestamp option ] [ -Q tos ] [hop1 ...] destination
复制代码

ping 命令会产生子进程吗?如果产生,这个输出结果怎么解释?谢谢了。

论坛徽章:
0
发表于 2009-03-16 15:12 |显示全部楼层

回复 #1 thinshootout 的帖子

试试下面这句话,如果没有分号隔开的话,bash对参数的解释是从右到左的,这点和C语言一样
echo $a a = 1
所以楼主的结果是可以理解的

论坛徽章:
0
发表于 2009-03-16 15:18 |显示全部楼层

回复 #57 youshuang 的帖子

关于子进程,是这么回事:
我们的shell(默认BASH)是所谓解释器,当你输入一个命令执行的时候,它通过fork命令创建一个子进程,然后用exec命令把你的命令替换掉这个子进程。这个时候就有两个进程,一个是shell,一个是你的命令。通常主进程shell会通过wait函数等待你的子进程执行完毕,因此一般情况下你的shell提示符会在你的命令运行完毕之后才出现。但是也可以用&使得你的命令在后台运行,这时候shell提示符立即跳出来,这是因为shell没有调用wait函数。

论坛徽章:
0
发表于 2009-03-16 15:25 |显示全部楼层

回复 #57 youshuang 的帖子

晕死,不好意思,说错了

论坛徽章:
0
发表于 2009-03-16 15:26 |显示全部楼层
原帖由 youshuang 于 2009-3-16 15:18 发表
关于子进程,是这么回事:
我们的shell(默认BASH)是所谓解释器,当你输入一个命令执行的时候,它通过fork命令创建一个子进程,然后用exec命令把你的命令替换掉这个子进程。这个时候就有两个进程,一个是shell, ...


这个理解是正确的,shell本身不存在父子进程的问题。

BTW:这个问题貌似没有必要太深究吧,除非你已经炉火纯青了。不然语言的细节是很多的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP