我试图使用 find 列出我的主目录下的所有文件名(基本名称,而不是完整路径)。我尝试这样做:
find ~/ -type f -exec echo $(basename "{}") ";"
Run Code Online (Sandbox Code Playgroud)
然而,我最终得到了完整路径的列表,而不仅仅是我想要的基本名称。我现在使用echo,但理想情况下 的结果$(basename "{}")应该是我想编写的其他一些函数的参数。
为什么 basename 函数没有正确应用?
shell 在$(...)运行之前正在解释find。如果您希望 find shell 来执行它,则需要停止 bash 来替换它。我们可以这样做:
find ~/ -type f -exec sh -c 'echo $(basename "{}")' \;
Run Code Online (Sandbox Code Playgroud)
这里的关键是单引号;Bash 不会触及其中的任何内容。