我正在尝试从脚本构建和运行一个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'我被困住了,感谢你的帮助。我也想知道是什么导致了这一切。我在SLES上使用bash 3.2.51。
我想执行的实际命令稍微长一点,但这里使用echo只是为了说明。
谢谢迪内什
发布于 2014-09-11 02:00:01
试图将复杂的命令存储在bash变量中,然后很好地计算变量,这是行不通的。
如果需要分段构建命令,请使用数组。请参阅这个有用的Bash:我试图在变量中放置一个命令,但是复杂的情况总是失败的!。
以下是基本策略:
# Make an array
declare -a findcmd=(find .)
# Add some arguments
findcmd+=(-name 'p*')
findcmd+=(-mmin +10)
findcmd+=(-exec echo {} \;)
# Run the command
"${findcmd[@]}"你需要了解bash的引用是如何工作的。请记住,当您输入命令(或bash从脚本文件读取命令时)时,引用(和取消引用)只发生一次。进入变量值的引号只是普通字符。
如果您正在试验set -x,还请记住,set -x插入引号是为了消除歧义。这些引号不是变量的一部分。虽然这显然是必要的,但对于不熟悉bash执行模型的程序员来说,这似乎是令人困惑的。
https://stackoverflow.com/questions/25777802
复制相似问题