8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

停止 shell 通配符扩展?

riffnl 2月前

120 0

编译后的命令行程序是否有办法告诉 bash 或 csh,它不希望在其参数中扩展任何通配符?例如,可能需要像这样的 shell 命令...

编译后的命令行程序有没有什么办法可以告诉 bash 或 csh,它不希望在其参数中扩展任何通配符?

例如,可能需要如下 shell 命令:

foo *

仅返回该字符的数字 ASCII 值。

帖子版权声明 1、本帖标题:停止 shell 通配符扩展?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由riffnl在本站《bash》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 虽然命令本身无法关闭通配符,但用户可以告诉 Unix shell 不要通配特定命令。这通常通过编辑 shell 的配置文件来实现。假设可以 foo 在命令路径中找到该命令,则需要将以下内容添加到相应的配置文件中:

    对于 sh、bash 和 ksh shell:

    alias foo='set -f;foo';foo(){ command foo "$@";set +f;}
    

    对于 csh 和 tcsh shell:

    alias foo 'set noglob;\foo \!*;unset noglob'
    

    对于 zsh shell:

    alias foo='noglob foo'
    

    命令路径不必使用。假设命令 foo 存储在目录 ~/bin 中,则上述内容将变为:

    对于 sh、bash 和 ksh shell:

    alias foo='set -f;foo';foo(){ ~/bin/foo "$@";set +f;}
    

    对于 csh 和 tcsh shell:

    alias foo 'set noglob;$home/bin/foo \!*;unset noglob'
    

    对于 zsh shell:

    alias foo='noglob ~/bin/foo'
    

    以上所有内容均使用 Apple 的 OSX 10.9.2 进行测试。注意:复制上述代码时,请小心删除任何空格。它们可能很重要。

    更新:

    用户 geira 指出,在 bash shell 中

    alias foo='set -f;foo';foo(){ ~/bin/foo "$@";set +f;}
    

    可以替换为

    reset_expansion(){ CMD="$1";shift;$CMD "$@";set +f;}
    alias foo='set -f;reset_expansion ~/bin/foo'
    

    这就消除了对函数 foo 的需要。

    用于创建此文档的一些网站:

    • p13

    • p14

    • 第15页

    • p16

    • p17

    • p18

    • 第19页

    • p20

    • p21

    • 第22页

    • p23

返回
作者最近主题: