在我的〜/ .bashrc中,我有以下内容:
function grep_shortcut {
local x="$1" y="$2"
shift 2
echo grep $x "$y" "${@-.}"
grep $x "$y" "${@-.}"
}
function grb {
grep_shortcut "-Irs --include '*.*rb'" $@
}
如果我运行grb foo
,echo
将打印grep -Irs --include '*.*rb' foo .
,这就是我想要的,但我没有得到grep的结果。我不明白为什么。
任何?
感谢。
答案 0 :(得分:1)
使用grb foo
,当您运行grep $x "$y" "${@-.}"
时,实际命令为:
grep "-Irs" "--include" "'*.*rb'" "foo" "."
这是解决问题的快捷方法:
#!/bin/bash
function grep_shortcut {
local x=$1 y=$2
eval "x=($x)"
shift 2
echo grep "${x[@]}" "$y" "${@-.}"
grep "${x[@]}" "$y" "${@-.}"
}
function grb {
grep_shortcut "-Irs --include '*.*rb'" "$@"
}
grb foo
这是避免eval
的另一种方式:
#!/bin/bash
function grep_shortcut {
local x=("${@:2:$1}"); shift "$(( 1 + $1 ))"
local y=$1; shift
echo grep "${x[@]}" "$y" "${@-.}"
grep "${x[@]}" "$y" "${@-.}"
}
function grb {
grep_shortcut 3 -Irs --include '*.*rb' "$@"
}
grb foo