免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3027 | 回复: 7
打印 上一主题 下一主题

shell十三问与shell十二基础的一点冲突? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-03-11 19:14 |只看该作者 |倒序浏览
shell十三问中提到:
在 shell command line 中,一般人或許不太計較 ( ) 與 { } 這兩對符號的差異,
雖然兩者都可將多個命令作群組化處理,但若從技術細節上,卻是很不一樣的:
( ) 將 command group 置於 sub-shell 去執行,也稱 nested sub-shell。
{ } 則是在同一個 shell 內完成,也稱為 non-named command group。

若,你對上一章的 fork 與 source 的概念還記得了的話,那就不難理解兩者的差異了。
要是在 command group 中扯上變量及其他環境的修改,我們可以根據不同的需求來使用 ( ) 或 { } 。
通常而言,若所作的修改是臨時的,且不想影響原有或以後的設定,那我們就 nested sub-shell ,
反之,則用 non-named command group 。

而同样的问题shell基础十二中却说到:
如果希望把几个命令合在一起执行, s h e l l提供了两种方法。既可以在当前s h e l l也可以在子s h e l l中执行一组命令。
1、():
为了在当前s h e l l中执行一组命令,可以用命令分隔符隔开每一个命令,并把所有的命令用圆括号()括起来。

它的一般形式为:
代码:
(命令1;命令2;. . .)


2、{}:
使用{ }来代替(),那么相应的命令将在子s h e l l中作为一个整体被执行,只有在{ }中所有命令的输出作为一个整体被重定向时,其中的命令才被放到子s h e l l中执行,否则在当前s h e l l执行。
它的一般形式为:
代码:
{命令1;命令2;. . . }


不知道是不是冲突?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-03-11 19:31 |只看该作者

shell十三问与shell十二基础的一点冲突?

(cmd1;cmd2;...;cmdN)#在一个子shell里执行一组命令
{cmd1;cmd2;...;cmdN}# 在当前shell里执行一组命令
这是一个基本概念

论坛徽章:
0
3 [报告]
发表于 2005-03-12 11:23 |只看该作者

shell十三问与shell十二基础的一点冲突?

原帖由 "寂寞烈火" 发表:
(cmd1;cmd2;...;cmdN)#在一个子shell里执行一组命令
{cmd1;cmd2;...;cmdN}# 在当前shell里执行一组命令
这是一个基本概念


[jason@firewall jason]$ A=1;echo $A;{ A=2; };echo $A
1
2
[jason@firewall jason]$ A=1;echo $A;( A=2; );echo $A
1
1

{ A=2; }改变了当前shell变量的值
( A=2; )未改变当前shell变量的值
-------------------------------------------------
redhat 8.0 + bash

论坛徽章:
0
4 [报告]
发表于 2005-03-14 16:25 |只看该作者

shell十三问与shell十二基础的一点冲突?

原帖由 "寂寞烈火" 发表:
(cmd1;cmd2;...;cmdN)#在一个子shell里执行一组命令
{cmd1;cmd2;...;cmdN}# 在当前shell里执行一组命令
这是一个基本概念

由于生病好几天没来看,抱歉!
首先感谢烈火兄!
我的意思是shell十二基础中这一点是不是错了?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
5 [报告]
发表于 2005-03-14 17:13 |只看该作者

shell十三问与shell十二基础的一点冲突?

如果希望把几个命令合在一起执行, s h e l l提供了两种方法。既可以在当前s h e l l也可以在子s h e l l中执行一组命令。
1、():
为了在当前s h e l l中执行一组命令,可以用命令分隔符隔开每一个命令,并把所有的命令用圆括号()括起来。
它的一般形式为:
代码:
(命令1;命令2;. . .)


2、{}:
使用{ }来代替(),那么相应的命令将在子s h e l l中作为一个整体被执行,只有在{ }中所有命令的输出作为一个整体被重定向时,其中的命令才被放到子s h e l l中执行,否则在当前s h e l l执行。它的一般形式为:
代码:
{命令1;命令2;. . . }

描述的感觉是有些问题
[jason@firewall jason]$ A=1;echo $A;{ A=2; };echo $A
1
2
[jason@firewall jason]$ A=1;echo $A;( A=2; );echo $A
1
1

{ A=2; }改变了当前shell变量的值
( A=2; )未改变当前shell变量的值

这段解释的比较直观

论坛徽章:
0
6 [报告]
发表于 2005-03-14 17:32 |只看该作者

shell十三问与shell十二基础的一点冲突?

再次感谢!
第一个是wigger直接引用的<<unix与linux shell编程>>这本书里的原句,我在看的时候感觉不太对,我觉得那本书上写的不好!还是网中人的解释比较正确易懂

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2005-03-14 18:42 |只看该作者

shell十三问与shell十二基础的一点冲突?

呵呵,那我更正下。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
8 [报告]
发表于 2005-03-14 22:24 |只看该作者

shell十三问与shell十二基础的一点冲突?

[quote]原帖由 "wingger"]呵呵,那我更正下。[/quote 发表:

呵呵~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP