分页: 1 / 1

【求助】问一个关于{}与()的问题

发表于 : 2010-04-08 12:41
ddvv
{}与()的意义:

代码: 全选

(cmd1;cmd2;...;cmdN)#在一个子shell里执行一组命令 
{cmd1;cmd2;...;cmdN}# 在当前shell里执行一组命令 
测试脚本testshellpid

代码: 全选

!/bin/bash
echo $$
a=1
执行命令:

代码: 全选

$ echo $$;( ./testshellpid;echo $a; )
与
$ echo $$;{ ./testshellpid;echo $a; }
2条命令的输出

代码: 全选

6469  #当前shell的pid
xxxx   #脚本中的pid,不等于6469
[空]    #$a未定义
我的问题是,使用{}来执行的时候,为什么脚本中的pid与当前pid不同呢?另外,为什么使用{}或者()执行,$a都是未定义的,“./testshellpid;echo $a”不是在同一个shell中执行的吗?

Re: 【求助】问一个关于{}与()的问题

发表于 : 2010-04-08 13:25
速腾1994
不懂:oops: :oops: :oops:

Re: 【求助】问一个关于{}与()的问题

发表于 : 2010-04-08 13:31
BigSnake.NET
两个 ./testshellpid 都是 fork 出的子 shell

Re: 【求助】问一个关于{}与()的问题

发表于 : 2010-04-08 13:40
ddvv
BigSnake.NET 写了:两个 ./testshellpid 都是 fork 出的子 shell
嗯,( ./testshellpid;echo $a; )中的testshellpid是不是应该叫做 子shell 中的 子shell ?