我正在阅读关于 -exec 的 find 手册命令{} 开关部分,它指出应引用 {} 以防止 shell 解释。
我试图在本地重现这种行为,但没有成功,并且想知道这种解释适用于什么上下文。
这就是我正在做的事情,试图让这种解释发挥作用:
echo "Hi" > f1
touch -- \$\(ls\ \-la\) -n
find ./ -type f -exec cat {} +
只是基本上尝试在解析恶意文件名时解释一个开关或命令,但它不会按照该人的建议进行解释。
我缺少什么?
或者,有没有一种方法可以使用 cat 作为命令而不是其他命令来利用这样的行代码?
答案1
在许多 shell 中,大括号开始大括号扩展。但与 sh 兼容的 shell、Zsh 和 (t)csh 仍然保留了普通的内容{}
。然而,至少 Fish shell 没有,它删除了一个未加引号的{}
, 然后egecho {}
将只输出一个空行。这会破坏find
使用 的命令{}
,因此您需要引用大括号。
find
这与填充文件名后为 shell 扩展而处理的文件名无关。此时,不涉及 shell,除非您显式调用 shell。