![使用 -exec eval 查找 $0](https://linux22.com/image/64916/%E4%BD%BF%E7%94%A8%20-exec%20eval%20%E6%9F%A5%E6%89%BE%20%240%20.png)
在下面的命令中,我想知道为什么$0
对找到的文件find
而不是echo
命令进行评估。
$ find . -type f -perm -u=x -exec bash -c '
/bin/echo $0 is the name of the file' {} \;
我知道如果我使用了双引号,$0
则等于-bash
并且使用单引号会延迟扩展,但为什么它不扩展为,/bin/echo
因为这是被调用的命令(通常是$0
)?
答案1
从bash
手册页:
-c If the -c option is present, then commands are read from the first
non-option argument command_string. If there are arguments after
the command_string, they are assigned to the positional
parameters, starting with $0.
bash
文件名使用大括号作为参数给出{}
,因此它被分配给$0
。$0
然后由bash完成扩展事先的来打电话/bin/echo
。