我可以将路径名扩展通过管道传递给命令吗?

时间:2020-02-19 13:53:13

标签: bash pathname

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

ls * | tail -1

我正在寻找类似的东西

* | tail -1

2 个答案:

答案 0 :(得分:2)

是的,您可以这样做,但是*并没有按照您的想象做。它扩展为目录内容列表,并尝试以二进制文件形式执行。当您的目录内容包含不希望运行的实际可执行文件时,这可能很危险。

您可以使用内置的Shell来执行路径名扩展结果,而无需进行单独的处理。例如使用printf()

printf '%s\n' * 

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

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

您可以tail输出此结果,并在看起来方便时过滤结果。

答案 1 :(得分:2)

您可以将*扩展列表传递给函数并输出最后一个参数:

f() { printf "%s\n" "${@: -1}"; }; f *
相关问题