You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本携带参数执行时无法识别命令行参数如何解决

Bash脚本自定义函数无法读取命令行参数问题修复

问题原因

Bash 中的位置参数($1、$#、$@等)作用域是独立的:

  • 脚本主体的位置参数对应你执行脚本时传入的命令行参数
  • 自定义函数内部的位置参数,仅对应你调用该函数时主动传入的参数,不会自动继承脚本的命令行参数

你代码最后调用check_for_file函数时没有传入任何参数,所以函数内部的$1永远为空,$#永远等于0,和你执行脚本时传没传参数没有关系。

修复方案

只需要修改脚本最后一行的函数调用逻辑,把脚本收到的命令行参数传递给函数即可,推荐传入全部参数兼容性更好:

# 原错误写法
check_for_file

# 替换为正确写法
check_for_file "$@"

修复后完整代码

check_for_file()
{
if [ $# -eq 0 ]; then
        local testing_file=myproject
else
        local testing_file=$1
fi

if [ -d "$testing_file" ]; then
        echo "Directory name already exists"
        exit
else
        mkdir -p "$testing_file"/{archive,backups,docs/{html,txt},assets,database,src/{sh,c}}
fi

}
check_for_file "$@"

额外优化了原代码中[ -d $testing_file ]的变量未加引号的问题,避免目录名带空格时执行报错。

效果验证

  • 执行./mkproj.sh:无参数传入,函数会自动使用默认值myproject创建目录结构
  • 执行./mkproj.sh hello:参数hello会正常传递到函数内部,你添加的echo "$1"调试代码也能正常输出hello

内容的提问来源于stack exchange,提问作者gogo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:39:00