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
相关产品推荐
相关产品推荐

