首页 > 解决方案 > 我可以通过管道将路径名扩展传递给命令吗?

问题描述

使用 bash 我想在不使用命令的情况下完成以下命令的功能ls,而是使用纯路径名扩展。这可能吗?

ls * | tail -1

我正在寻找类似的东西

* | tail -1

标签: bashpathname

解决方案


是的,您可以使用这样做,但*不会做您认为的事情。它扩展为目录内容列表并尝试将自身作为二进制文件执行。当您的目录内容包含不打算运行的实际可执行文件时,这可能很危险。

您可以使用内置的 shell 来处理路径名扩展结果,而无需分叉一个单独的进程。例如使用printf()

printf '%s\n' * 

看看当你尝试*在命令行中执行时会发生什么

mkdir -p foobar
cd foobar
touch zeezee
*
bash: zeezee: command not found

您可以查看tail此输出的结果并在您觉得方便时过滤结果。


推荐阅读