Appearance
Nushell 参数与交互
本页结论:Nushell 彻底消灭了传统 Shell 解析
$1,$2或用getopts手写循环的痛苦,直接内置了类型安全的参数签名机制。
自定义命令与参数签名
在 Nushell 中定义一个带有参数的命令(def),就像在 TypeScript 或 Rust 中写函数一样,自带类型推导、默认值和可选参数。
nushell
# 定义一个名为 greet 的命令
def greet [
name: string # 必填位置参数,类型为字符串
--age: int # 可选命名参数(flag),类型为整数
--shout (-s) # 布尔类型 Flag,带有短选项 -s
] {
let greeting = if $shout {
$"HELLO ($name | str upcase)!"
} else {
$"Hello ($name)"
}
if ($age != null) {
$"($greeting). You are ($age) years old."
} else {
$greeting
}
}调用与验证
当你定义好参数签名后,Nushell 会自动为你处理所有入参验证,甚至自动生成 --help 文档。
nushell
# 正确调用
> greet "Alice" --age 30
Hello Alice. You are 30 years old.
# 短选项调用
> greet "Bob" -s
HELLO BOB!
# 错误调用:类型不匹配
> greet "Charlie" --age "thirty"
Error: nu::parser::type_mismatch
× Type mismatch.
╭─[entry #4:1:23]
1 │ greet "Charlie" --age "thirty"
· ────┬───
· ╰── expected int, found string
╰────这比传统的 Bash case "$1" in 循环解析不仅易读百倍,而且在终端输入时能够获得开箱即用的自动补全提示。