$ ls -l
total 0
-rw-rw-r-- 1 t t 0 Jun 8 16:37 'file; echo hello'
$ find . -exec echo {} \;
.
./file; echo hello
我想知道为什么下面的命令不是ls -l
当前目录中的每个文件?为什么它报告一些名为 的文件1
?谢谢。
$ find . -exec sh -c "ls -l $@" sh {} \;
ls: cannot access '1': No such file or directory
ls: cannot access '1': No such file or directory
$ find . -exec sh -c "echo ls -l $@" sh {} \;
ls -l 1
ls -l 1
答案1
在这两种情况下,$@
在运行之前都会由当前 shell 展开find
,因为它位于双引号字符串中。我猜您已$1
设置为1
(运行printf "%s\n" "$@"
以查看位置参数的当前值)。
要按照我认为您的意图运行您的实验,您应该在命令周围使用单引号,并在命令周围使用双引号$@
(以避免额外的分割);例如:
find . -exec sh -c 'ls -l "$@"' sh {} \;