以编程方式将glob添加到bash命令

时间:2016-02-09 17:34:20

标签: bash glob

如果我在bash脚本中没有满足我的参数,那么寻找一种扩展glob的方法,我不是肯定的,但我认为它可能需要eval或类似的东西,但我不记得了我的头顶。

功能

function search ()
{
  [ 'x' == "${2}x" ] && {
    what="*"
  } || {
    what="${2}"
  }

  grep -n -Iir "${1}" "${what}"
}

没有arg2的预期结果

grep -n -Iir 'something' *  ## ran as the normal command

2 个答案:

答案 0 :(得分:5)

请记住,在*启动之前,grep会被shell扩展为文件名列表。因此,您可以自己扩展它们:

search() {
  local tgt=$1; shift      # move first argument into local variable tgt
  (( "$#" )) || set -- *   # if no other arguments exist, replace the remaining argument
                           # ...list with filenames in the current directory.
  grep -n -Iir "$tgt" "$@" # pass full list of arguments through to grep
}

答案 1 :(得分:0)

您遇到语法问题:您希望引用$2,但如果它是*则不需要。因此,您只需要两个命令:

search () {
    if [ -z "$2" ]; then
        grep -n -Iir "$1" *
    else
        grep -n -Iir "$1" "$2"
    fi
}