LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: qhgary

eval $(dircolors -b /etc/dircolors) 这里的$()什么意思?

[复制链接]
发表于 2004-2-11 12:00:02 | 显示全部楼层
最初由 penny 发表
换个简单的例子,那就很好理解了

$ echo uname
uname
$ eval `echo uname`
Linux

$()是``的一种比较规范的写法。


之所以还使用``,是bash对Unix Shell命令替换语法的兼容,所以最好还是用$();而且``不好做嵌套。
 楼主| 发表于 2004-2-11 16:05:49 | 显示全部楼层
彻底明白了,谢谢大家
 楼主| 发表于 2004-2-13 09:41:14 | 显示全部楼层
现在又有疑问了,
既然eval相当于扮演了一个传递参数给shell的角色,那么为什么
dircolors -b /etc/dircolor会返回这样一个参数呢?
这不是一个命令么? 把那些有关颜色的变量导到/etc/dircolor里面,这个命令执行完也应该是返回一个操作成功与否的标志啊
发表于 2004-2-13 11:13:53 | 显示全部楼层
最初由 qhgary 发表
现在又有疑问了,
既然eval相当于扮演了一个传递参数给shell的角色,那么为什么
dircolors -b /etc/dircolor会返回这样一个参数呢?
这不是一个命令么? 把那些有关颜色的变量导到/etc/dircolor里面,这个命令执行完也应该是返回一个操作成功与否的标志啊


dircolors的功能是输出用来设定 LS_COLORS 环境变量的命令。它不是导入信息到/etc/dircolor,恰恰相反,这个文件是可选项.
从其man手册可分析到该文件的作用.
如果指定<文件>,则读取该文件的数据来决定文件类型及扩展名相应的颜色。
否则,会使用一个默认的数据库。如要了解此文件格式的细节,请执行
‘dircolors --print-database’。
而$()返回的不是命令退出状态(0-255),而是命令的标准输出.
我们所说的eval命令,后面隐藏了shell的命令行处理规则,这个才是学习的关键.
 楼主| 发表于 2004-2-13 23:23:40 | 显示全部楼层
而$()返回的不是命令退出状态(0-255),而是命令的标准输出
如果没有输出呢?就是0?$()就是这个意思?
发表于 2004-2-14 13:09:19 | 显示全部楼层
最初由 qhgary 发表
而$()返回的不是命令退出状态(0-255),而是命令的标准输出
如果没有输出呢?就是0?$()就是这个意思?

没有输出,那返回的当然就是空字符串啦,并不是0!
  1. [root@hk root]# echo $(cd .)
  2. [root@hk root]# [ "$(cd .)" = "" ] && echo ok
  3. ok
复制代码
看到了吗?cd .没有输出,故$()返回的是空字符串.
学shell最关键在于自己动手去摸索,去试验.
发表于 2004-2-14 21:32:31 | 显示全部楼层
cat >testeval <<"EOF"
#!/bin/bash
eval echo "\$$#"
EOF
chmod +x testeval
./testeval foo
./testeval foo bar

呵呵,这个也是eval的典型例子
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表