V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
AndyAO
V2EX  ›  Linux

在 Linux Bash 中普通的 glob 只能用于路径名吗?

  •  1
     
  •   AndyAO · 2021-05-25 10:41:54 +08:00 · 1116 次点击
    这是一个创建于 1080 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我在使用 Bash 之前一直在使用 PowerShell,在 PowerShell 上通配符可以用于很多很多的命令。

    但是 Bash 上的通配符好像不是这样,目前看到的所有资料好像都是在将 glob 用于路径名。

    而且 echo * 居然会直接显示当前目录下的所有内容,给人的感觉就是所有的字符串只要有*,好像都会首先被解释为路径通配符。

    在 bash 中 glob 只能用于路径吗?

    如果不是的话,那还用于什么场合呢?

    注意:这里指的是普通的 glob,而非 extglob,我知道后者能用于条件表达式的=和!=

    第 1 条附言  ·  2021-05-26 13:23:10 +08:00

    搞清楚了

    1. glob在shell内部只能用于「路径扩展」、「Case」和「条件表达式」(默认extglob)
    2. 路径扩展只在非字符数字面量的情况下有用,对任何命令都有用
    3. 其他非shell内部的命令有些也支持glob,不过那和shell本身没关系
    6 条回复    2021-05-26 11:27:24 +08:00
    codehz
        1
    codehz  
       2021-05-25 11:18:32 +08:00 via Android   ❤️ 1
    Linux 的 glob 是 shell 处理的
    Windows 是直接传原始命令行
    hsfzxjy
        2
    hsfzxjy  
       2021-05-25 11:45:45 +08:00 via Android   ❤️ 1
    echo '*' 就不会展开了
    napsterwu
        3
    napsterwu  
       2021-05-25 13:24:16 +08:00 via iPhone
    *是特殊字符,需要加斜杠转义或者用单引号括起来
    AndyAO
        4
    AndyAO  
    OP
       2021-05-26 11:01:41 +08:00
    @codehz 任何命令的实际参数中只要有类似于*这样的元字符,Shell 都会预先处理,返回路径数组?
    AndyAO
        5
    AndyAO  
    OP
       2021-05-26 11:02:22 +08:00
    @hsfzxjy 为什么会出现这种情况?
    这个现象有文档记录吗?如果有在哪?
    no1xsyzy
        6
    no1xsyzy  
       2021-05-26 11:27:24 +08:00
    @AndyAO `man bash` ,搜索 「 Pathname Expansion 」
    传入了以后如何看待这个 '*' 是被调用的程序本身的想法,说不定被认为是正则的一部分,或者 python -c "print(*range(100))"
    请亲手试试以下代码在不同系统下的行为:

    python -c "import sys; print(sys.argv)" *
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4153 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 00:57 · PVG 08:57 · LAX 17:57 · JFK 20:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.