文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>命令在Shell中的执行

命令在Shell中的执行

时间:2010-04-24  来源:xfwduke

在shell中以just the name方式执行自定义的脚本时,会先创建一个sub shell,脚本实际是在sub shell中执行的.
http://bbs.chinaunix.net/thread-512925-2-1.html的讨论的中提到了shell执行命令的过程,即所有可以解析的变量会在当前shell中做替换,完成变量替换后,再创建sub shell并执行相应的命令.

#! /bin/bash

#1.bash

echo $A


$ A="aaa"

$ echo $A

aaa

$ ./1.bash

<nth>


在当前shell查看变量A的值,很正常的输出.
在当前shell调用脚本 1.bash,会新建一个sub shell再执行其中的命令,由于sub shell中并没有定义变量A,所以没有任何输出.

$ A="aaa"

$ source 1.bash

aaa


以source方式让 1.bash在当前shell中执行,能得到A的值

$ A="aaa"

$ A="bbb" ./1.bash  #

bbb

$ echo $A

aaa

$ A="bbb"; ./1.bash ##

<nth>

$ echo $A

bbb


"#"行实际的效果是在 1.bash中插入了 A="bbb",再输出其值,由于脚本中的变量属于sub shell,所以并不会影响到当前shell中的同名变量.
"##"行加了个分号 ";",将赋值和执行拆开为2条命令,这样是对A的赋值在当前shell执行,然后再新建sub shell执行 1.bash,所以会有下面的结果.

$ A="aaa"

$ A="bbb" echo $A  #

aaa

$ echo $A

bbb


在 "#" 行,shell会将echo $A中的变量$A首先替换为"aaa",然后再执行echo,所以可以等效为

$ A="bbb" echo "aaa"


所以才会有下面的输出结果.即,遵循 "先替换,再执行"的原则.
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载