这是上下文所需的命令:
alias ls-last='ls -ltr | tail -n ${$1:20}'
但这不起作用
zsh: bad substitution
[1] broken pipe ls -ltr
我想做的是能够运行ls-last 10
最后 10 个,但如果那样的ls-last
话,它会默认为 20。在这种情况下(单行)适用于 bash 和 zsh 的最佳方法是什么?
这里存在三个问题:
${$1:...}
是无效的参数扩展bash
$1
是当前 shell 的位置参数之一,而不是别名的“参数”。-
or:-
,而不是:
单独的。使用函数一次修复所有三个:
然而,这是脆弱的,因为文件名可以包含换行符,使得 的输出
ls
每行只包含一个文件名的假设是不正确的。正如您提到的
zsh
,您可以使用常规 glob 来完成此操作,而不是命令ls
:glob 限定符
(...)
修改 glob 的结果*
:Om
按修改日期对结果进行排序,例如ls -tr
.[-x, -1]
仅返回最后的x
结果。