如果我在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
答案 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
}