bash 脚本:构建一个命令然后执行

ewo*_*wok 11 bash shell

我正在尝试创建一个函数,该函数基本上接受诸如此类的参数f hello there my friend并使用find这些字符串的所有出现来搜索目录,因此它将是find | grep 'hello\|there\|my\|friend'. 我是 shell 脚本的新手,但我的代码如下:

function f { 
  cmd="find | grep '"
  for var in "$@"
  do 
    cmd="$cmd$var\\|"
  done
  cmd="${cmd%\\|}'"
  echo "$cmd"
  $cmd 
}
Run Code Online (Sandbox Code Playgroud)

当我执行命令时,我得到这个:

# f hello there my friend
find | grep 'hello\|there\|my\|friend'
find: `|': No such file or directory
find: `grep': No such file or directory
find: `\'hello\\|there\\|my\\|friend\'': No such file or directory
Run Code Online (Sandbox Code Playgroud)

为什么它不起作用,我怎样才能使它起作用?我想这与未将字符串转换为命令有关,但我对 shell 脚本的工作原理知之甚少。

mik*_*n32 7

要从 bash 中的脚本运行命令并捕获结果,请使用以下语法:

CMD_STRING="ls"
RESULT=$($CMD_STRING)
echo $RESULT
Run Code Online (Sandbox Code Playgroud)

或者,只需运行以下命令:

CMD_STRING="ls"
eval $CMD_STRING
Run Code Online (Sandbox Code Playgroud)