开启set -u的zsh脚本中如何单次赋值实现可选参数basename提取
解决zsh 5.8.1中单次赋值实现basename/空值的需求
可以通过无空格的嵌套参数展开实现单次赋值,正确写法如下:
set -u var=${${1:-}:t}
细节说明:
${1:-}:在set -u模式下,避免未传参数时访问$1触发报错——若$1不存在则返回空字符串,存在则返回参数本身。:t:zsh专属的参数修饰符,用于提取路径的basename(即文件名部分)。对空字符串使用该修饰符仍返回空,完全匹配需求。
你之前的写法var=${ ${1:-}:t }报错,是因为参数展开内部添加了空格,zsh不允许这种语法,去掉空格即可正常运行。
测试验证:
- 传入文件路径参数时:
./your_script.sh /home/user/demo.pdf echo $var # 输出 demo.pdf - 不传入参数时:
./your_script.sh echo $var # 输出空字符串
内容的提问来源于stack exchange,提问作者user1934428
相关产品推荐
相关产品推荐

