我想按时间列出和排序,所有匹配某个模式的文件,然后只得到前 20 个:
ls -laths *.txt | head -20
这很好用,例如,如果我创建两个文件:
touch 1.txt
touch 2.txt
上述命令的结果是:
$ ls -laths *.txt | head -20
1,5K -rw-rw---- 1 user user 0 20. Apr 09:49 2.txt
1,5K -rw-rw---- 1 user user 0 20. Apr 09:49 1.txt
如果我在终端上这样做,这很有效。但是当试图将其保存为别名时(输入 $1 是我想要的模式),如下所示:
alias lis20='function _(){ ls -laths "${1}" | head -20; }; _'
然后当我使用别名时,我得到:
$ lis20 *.txt
1,5K -rw-rw---- 1 user user 0 20. Apr 09:49 1.txt
这意味着它只列出第一个文件。我已经尝试了内部变量的几次扩展,就像在这个问题中一样,但没有任何成功。
我正在使用 zsh,但如果有一个适用于 bash 和 zsh 的解决方案会很好。
别名是文本扩展,所以用
lis20 *.txt
别名首先扩展为然后文件名生成将函数调用变成
所以在函数中,
$1
只包含第一个匹配的文件名。现在,您可以通过在函数中使用
"$@"
而不是来解决这个问题"$1"
......("$@"
很神奇:尽管有引号,但它会扩展为多个单词,所有参数都是分开且完整的。)但是,无论如何,您实际上并不需要函数和别名。只需使其成为单个功能: