在-exec arg上找到命令fusses

Din*_*esh 0 bash find

我正在尝试find从脚本构建和运行命令.但是我收到了一个非常神秘的错误信息find.以下基本总结了我如何构建命令行并运行它

$ xx="find . -name 'p*' -mmin +10 -exec echo {} \\;"
$ echo "$xx" #.....and I get the same print from echo $xx
find . -name 'p*' -mmin +10 -exec echo {} \;
$ $xx
find: missing argument to `-exec'
$ find . -name 'p*' -mmin +10 -exec echo {} \;
./p2.sh
./p1.sh
$ read xx
find . -name 'p*' -mmin +2 -exec echo {} \\;
$ $xx
find: missing argument to `-exec'
Run Code Online (Sandbox Code Playgroud)

我被困住了,非常感谢你的帮助.我也想知道造成这种情况的原因.我在SLES上使用bash 3.2.51.

我想要执行的实际命令有点长,但我echo在这里用来说明.

谢谢Dinesh

ric*_*ici 5

试图在bash变量中存储复杂的命令,然后很好地评估变量.

如果需要分段构建命令,请使用数组.看到这个有用的Bash FAQ:我正在尝试将命令放在变量中,但复杂的情况总是失败!.

这是基本策略:

# Make an array
declare -a findcmd=(find .)
# Add some arguments
findcmd+=(-name 'p*')
findcmd+=(-mmin +10)
findcmd+=(-exec echo {} \;)
# Run the command
"${findcmd[@]}"
Run Code Online (Sandbox Code Playgroud)

您需要了解bash引用的工作原理.请记住,当您键入命令时(或当bash从脚本文件中读取它时),引用(和取消引用)只发生一次.进入变量值的引号只是普通的字符.

如果您正在尝试set -x,请记住set -x 插入引号以消除歧义.这些引号不是变量的一部分.虽然这显然是必不可少的,但对于不熟悉bash执行模型的程序员来说似乎很困惑.