我正在尝试创建一个函数,该函数基本上接受诸如此类的参数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 脚本的工作原理知之甚少。
要从 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)