红联Linux门户
Linux帮助

bash命令行替换问题

发布时间:2009-07-14 20:37:47来源:红联作者:hbf
[i=s] 本帖最后由 hbf 于 2009-7-14 20:43 编辑 [/i]

书中有这么一句 “ bash在命令运行前应用了大量的命令行替换 ” ,这里不明白,比如说运行命令find /etc -name *.conf之前, 如何使用命令行转换了?
文章评论

共有 7 条评论

  1. dsyayo 于 2009-07-19 00:31:38发表:

    很茫然啊~~新手来看看~

  2. 飞翔26 于 2009-07-17 15:08:44发表:

    不是很清楚,能再详细点嘛

  3. cgy_nhtl 于 2009-07-16 18:15:02发表:

    [i=s] 本帖最后由 cgy_nhtl 于 2009-7-16 18:21 编辑 [/i]

    引用:
    3# cgy_nhtl
    如果楼上所说正确,那么为什么会出现下图所示的结果:
    17818
    主目录下没有*.conf的文件,结果会搜索出结果
    17819
    在主目录下创建了两个*.conf的文件,结果报错
    假如说 “find /etc -name *.conf ...
    hbf 发表于 2009-7-16 15:28

    我是在本机‘/’目录下执行的 find /etc -name *.conf
    结果如楼上所示,有些成功,有些文件夹确实是没有权限:
    find: /etc/cups/ssl: Permission denied
    >cd etc/cups 执行‘ll ’命令
    drwx------ 2 root lp 4096 May 25 2008 ssl
    不明白楼上所说跟根目录有何关系?

    楼主所说 *.conf 替换为a.conf、b.conf, 这里的‘*’应该叫命令通配符吧。本人也是一知半解,还望高人指点!

  4. hbf 于 2009-07-16 16:10:43发表:

    4# hbf
    仔细看了一下,忽然发现这样一个问题
    如果A=*.conf,会看到A=a.conf b.conf,也就是说,在执行A=$(*.conf)之前,bash已经将*.conf转换为a.conf b.conf了。因为整条语句中,只有*.conf可以应用命令行转换。也就是说,bash在执行命令前,会先将能转换的部分先转换了。只有这么理解才能解释上面的现象了。不知道这样理解对么,哪位老师能解答以下?

  5. hbf 于 2009-07-16 15:28:48发表:

    [i=s] 本帖最后由 hbf 于 2009-7-16 16:01 编辑 [/i]

    3# cgy_nhtl
    如果楼上所说正确,那么为什么会出现下图所示的结果:
    [attach]17818[/attach]
    主目录下没有*.conf的文件,结果会搜索出结果
    [attach]17819[/attach]
    在主目录下创建了两个*.conf的文件,结果报错
    假如说 “find /etc -name *.conf = cd /etc;
    find -name *.conf”
    怎么会出现上面的情况?在/etc下寻找文件怎么会与主目录有关系?
    书中是这么解释的 : bash首先应用命令行转换,将*.conf转换为a.conf 和 b.conf ,于是原命令就成了find /etc -name a.conf b.conf 显然find多了一个参数。于是报错。我的问题是,bash怎么应用命令行转换了? 一条命令bash会转换哪些部分?为什么上面的例子bash只转换了*.conf?
    如果用这条命令:A=$(*.conf) 结果会报错,因为a.conf不是有效命令。

  6. cgy_nhtl 于 2009-07-16 09:08:37发表:

    同意楼上的

  7. ph4291983 于 2009-07-14 21:40:57发表:

    find /etc -name *.conf = cd /etc;
    find -name *.conf


    我是这样理解的!