Fish脚本参数校验问题:检查参数是否为目录的代码无法正常运行
问题排查与修复
你的Fish脚本逻辑存在两个核心问题,导致无法正常工作:
1. 参数存在性判断错误
count $argv > /dev/null 这个写法完全无效——Fish的count命令无论参数数量多少,退出码始终为0(仅在命令本身出错时才返回非0),所以这个条件永远为真,脚本会直接进入错误分支,不管你有没有传入参数。
正确的参数存在性判断应该用set -q argv[1]来检查第一个参数是否已定义,或者用test (count $argv) -eq 0判断参数数量为0。
2. 逻辑条件组合错误
原代码的or逻辑会导致只要其中一个条件成立就触发错误,但你需要的逻辑是:没有传入参数,或者传入的参数不是目录时才报错。原代码的第一个条件永远为真,导致无论什么情况都会报错。
修复后的代码
#!/usr/bin/fish if not set -q argv[1] or not test -d "$argv[1]" echo 'Expected a directory.' exit 1 end
代码说明
not set -q argv[1]:检查是否未传入第一个参数(set -q用于判断变量是否存在)not test -d "$argv[1]":检查传入的第一个参数不是目录- 用
or连接两个条件,符合你需要的“无参数或参数非目录则报错”的逻辑 - 给
$argv[1]加双引号是好习惯,能避免参数包含空格时出现解析问题
内容的提问来源于stack exchange,提问作者Luminous
相关产品推荐
相关产品推荐

