论坛风格切换切换到宽版
  • 467阅读
  • 4回复

[RedHat] 请教shell中命令的执行,shell中的``和$()有什么区别? [复制链接]

上一主题 下一主题
离线chkey.
 
发帖
2007
C币
-140550
威望
405
贡献值
1
银元
-1
铜钱
4645
人人网人气币
0
只看楼主 倒序阅读 使用道具 楼主  发表于: 2009-04-27
请教she.ll中命.令的执行,shell中的``和$()有什么区别?.

本人最.近重新编译了red hat. 9.0的内核(2.4.20-8),.
之前能够运行的一段脚本频繁报错,too .ma.ny argument错误,教育
就是如下红色的代码
if [ .-z `/sbin/pidof  myapp` ];. then             汽车
      .......
fi

新编译的内核也是2.4..20-8,make menuconfig直接保存,但是不能运行上面这段.代码,           鲜花
经过多次修改测试,改为
if [ -z $(/sb.in/pidof  myapp) ]; .then              乙肝
就可以了,很奇怪,不知道.内核那部分配置能影响.到这里,             汽车
如果我还想支持``单斜引号,怎么配置内核.呢?.
请各位大侠支招啊?

评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
离线潋滟.
发帖
2175
C币
-262430
威望
417
贡献值
1
银元
-1
铜钱
4968
人人网人气币
0
只看该作者 沙发  发表于: 2010-04-10
Re:[RedHat]
新内核的shell加上""就可以了,不知道为什么?
if [ -z "`/sbin/pidof  myapp`" ]; then

难道之前的检测不严格?

发帖
2113
C币
-235288
威望
388
贡献值
1
银元
-2
铜钱
4716
人人网人气币
0
只看该作者 板凳  发表于: 2010-04-10
Re:[RedHat]
楼主提了一个SHELL使用者经常遇到的问题。

简单的说,这是一个基础问题。关于这个问题的答案使用搜索可以获得。比如下面的搜索结果:
http://search.chinaunix.net/bbs. ... bbs=1&forums=24

然而为什么2楼的程序可以运行则就是shell里的引号问题了。

楼主如果手头没有合适的书,可以先到SHELL版看看置顶的精华文章“十三问”。相信此文可以帮助你解决很多基本的疑问。

离线babyq.
发帖
1929
C币
-152877
威望
347
贡献值
1
银元
-2
铜钱
4327
人人网人气币
0
只看该作者 地板  发表于: 2010-04-10
Re:[RedHat]


离线asterye.
发帖
1935
C币
-199233
威望
347
贡献值
1
银元
-2
铜钱
4307
人人网人气币
0
只看该作者 4楼 发表于: 2010-04-10
Re:[RedHat]
语法就不正确,test的-z参数的意思是:如果字符串长度为零则返回真。

if [ -z `/sbin/pidof  myapp` ]; then
      .......
fi
这条语句在执行时,将`/sbin/pidof  myapp`替换为myapp进程的pid,假设pid的值为1234,那么这条语句就变成了
if [ -z 1234 ]; then
      .......
fi
-z 1234是什么?当然会报错了,如果进程不存在,则命令替换结果为空,此语句则会变成
if [ -z  ]; then
      .......
fi
同样是语法错误。
加上引号之后,会使你的命令替换结果转成一个字符串(也可能是空串),所以就正确了。

``与${}都是命令替换,没什么大区别,只是${}可以嵌套,``不行。

快速回复
限100 字节
批量上传需要先选择文件,再选择上传
 
上一个 下一个