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

Cygwin bash运行shell脚本传参后仍报$1 unbound variable错误原因

报错原因
  • 你在脚本中开启了set -o nounset选项:该选项会强制bash在遇到未定义的变量时直接抛出错误并终止运行,你的脚本第8行读取$1时没有获取到传入的参数,直接触发了该报错。
  • 参数传递规则不符合bash要求:bash -c的语法规则为bash -c <待执行命令串> [shell名称($0) [位置参数$1 $2 ...]],你当前的写法中,ARGUMENT1是传给了新启动的bash进程本身,没有传递给你要运行的test.sh脚本,因此脚本执行时$1为空。
解决方案

方案1:将脚本调用和参数合并到-c的命令字符串中

直接把脚本路径和参数都放在引号内作为-c的整体参数即可,示例命令:

C:\cygwin64\bin\bash.exe -l -c "/cygdrive/c/test.sh ARGUMENT1"

方案2:通过$@传递位置参数

严格遵循bash -c的参数规则传递参数,将ARGUMENT1作为位置参数传递给内部调用的脚本:

C:\cygwin64\bin\bash.exe -l -c '/cygdrive/c/test.sh "$@"' bash ARGUMENT1

此处的第二个bash是给新启动的shell指定$0的名称,无实际功能影响,可替换为任意字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:57:03