首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bashrc中的代码不工作

bashrc中的代码不工作
EN

Stack Overflow用户
提问于 2014-05-09 14:11:42
回答 3查看 62关注 0票数 0

下面的代码在bashrc中不工作,但在终端中使用其他参数为null。

代码语言:javascript
复制
search () {
        find $1 -type f | egrep '(.$2|.$3|.$4|.$5|.$6|.$7|.$8|.$9|.$10)'
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-09 14:20:26

写这个:

代码语言:javascript
复制
search() {
  find "$1" -type f \( -true \
    -o -name "*$2*" \
    -o -name "*$3*" \
    -o -name "*$4*" \
    -o -name "*$5*" \
    -o -name "*$6*" \
    -o -name "*$7*" \
    -o -name "*$8*" \
    -o -name "*$9*" \
    -o -name "*$10*" \
  \)
}
  1. 正如@chepner所指出的,单引号阻止参数展开。用双引号。
  2. egrep将创建一个基于行的匹配结果,这比上面的结果更不精确.也比较慢。

如果上面的语句不是您所需要的,请记住,除了-name的模式匹配之外,GNU还有正则表达式谓词。没有必要向grep输送管道。您可以通过将参数构造为find (如在this answer中),将上述函数扩展为不受限制的参数。

票数 1
EN

Stack Overflow用户

发布于 2014-05-09 22:26:36

我不知道egrep得到的是文字文本$2而不是参数。我用这个代码解决了:

代码语言:javascript
复制
search-type () {
  case "$#" in
       1) echo "Missing arguments";;
       2) find $1 -type f | egrep '(.'$2')';;
       3) find $1 -type f | egrep '(.'$2'|.'$3')';;
       4) find $1 -type f | egrep '(.'$2'|.'$3'|.'$4')';;
       5) find $1 -type f | egrep '(.'$2'|.'$3'|.'$4'|.'$5')';;
       6) find $1 -type f | egrep '(.'$2'|.'$3'|.'$4'|.'$5'|.'$6')';;
       7) find $1 -type f | egrep '(.'$2'|.'$3'|.'$4'|.'$5'|.'$6'|.'$7')';;
       8) find $1 -type f | egrep '(.'$2'|.'$3'|.'$4'|.'$5'|.'$6'|.'$7'|.'$8')';;
       9) find $1 -type f | egrep '(.'$2'|.'$3'|.'$4'|.'$5'|.'$6'|.'$7'|.'$8'|.'$9')';;
      10) find $1 -type f | egrep '(.'$2'|.'$3'|.'$4'|.'$5'|.'$6'|.'$7'|.'$8'|.'$9'|.'$10')';;
      11) echo "Many arguments";;
  esac;
}

@kojiro代码不起作用。

用regex可以简化这段代码吗?

谢谢你们!

票数 0
EN

Stack Overflow用户

发布于 2014-05-10 00:37:03

我修改了一些更简单的、简单的clear的代码,并使用任意数量的参数。

代码语言:javascript
复制
search-type() {
    # Flags
    flag=0
    fld=1
    for x in "$@"
    do
        # The first parameter is the directory; ignored!
        if [ $fld = 1 ]; then
            fld=0
        else
            # Verify if have more than one file
            if [ $flag = 0 ]; then
                cmd='-name '$x
                flag=1
            else
                cmd+=' -o -name '$x
            fi
        fi
    done
    find $1 -type f $cmd;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23566801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档