为什么powershell命令和参数都那么长,远远超过cmd和bash。。
一句话答案
PowerShell 的设计目标不是“少敲字母”,而是“一眼能读懂脚本”和“机器可读的对象管道”。
长名字是故意的,但你可以(而且官方鼓励)一次性把它压缩成自己想要的短别名;之后比 bash 还短。
- 设计哲学差异
| bash / cmd | PowerShell |
|---|---|
| “对人简短” | “对机器明确” |
| 文本流 | 对象流 → 每个命令必须携带类型信息 |
| 历史包袱(1970s) | 2006 年重新设计,拒绝歧义 |
ls -lrt 什么意思要靠记忆 |
Get-ChildItem -File | Sort-Object LastWriteTime -Descending 读即懂 |
| 空格、大小写、转义地狱 | 空格、大小写、路径都原生支持 |
- 长名字带来的直接好处
(这些好处 bash 要靠额外工具才能勉强模拟)
-
自发现
不需要 Google,也不用man:Get-Command *Item* # 找出所有“Item”动词命令 Get-Help Remove-Item -Examples # 三行示例立即抄 -
强类型管道
bash 的ls -l输出是文本,你要awk '{print $9}'去猜第 9 列;
PowerShell 把文件对象传下去,列名就是属性:gci | where Length -gt 1MB | sort LastWriteTime -
跨语言可读
把脚本发给不懂 shell 的同事,他也能猜出Get-Content log.txt | Where-Object {$_ -match "ERROR"}在干啥。
- 官方早就给你“缩短权”
-
命令自动缩短到唯一前缀
Sort-Object→sort
Get-ChildItem→gci
Where-Object→?
这些不是黑客技巧,是官方文档写的。 -
参数也能缩短
Sort-Object LastWriteTime -Des只要不与别的参数冲突,PowerShell 就认。
-
别名系统
打开任意 shell 输入:Get-Alias | where Source -eq Microsoft.PowerShell.Core可以看到微软已经内置了
gc=Get-Content,sc=Set-Content,cp=Copy-Item…
目的就是让交互式使用和脚本可读性两全。
- 实战:把“长命令”压成比 bash 还短
一次写入 $PROFILE:
function lt($Path='.', $n=0) {
gci $Path | sort LastWriteTime -des | Select -f $n
}
Set-Alias l lt
Set-Alias ll 'Get-ChildItem | Format-Wide -Column 1'
以后日常:
l # 最新在前
l -n 5 # 最新 5 条
l ~/Downloads # 任意目录
击键次数 ≤ ls -ltr
- 结论
- 长名 = 可读 + 自描述 + 无歧义 → 脚本生命周期 10 年起跳
- 短名 = 由用户一次性定义 → 交互时零负担
- 因此 PowerShell 并不强迫你天天敲长命令;它只是拒绝让脚本里出现魔法缩写。
记住一句话:
“PowerShell gives you verbosity by default and brevity by choice.”
浙公网安备 33010602011771号