为什么我收到错误未绑定变量 cygwin bash 错误

Why I am getting error unbound variable cygwin bash error

以下是我的脚本(片段)

#!/bin/bash

set -o errexit
set -o nounset
set -o xtrace
set -o pipefail

ARGUMENT=

我正在尝试 运行 使用 cygwin bash 并出现以下错误。

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

出现以下错误

+ set -o pipefail
/cygdrive/c/test.sh: line 8: : unbound variable

您没有将参数传递给 test.sh,因为该参数不包含在您传递给 bash-c 选项值中。只需添加引号即可解决此问题:

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

使用 set -o nounset(实现此目的的更简单方法是 set -u),当您引用尚未设置的变量时,您要求 bash 引发错误。

ARGUMENT=

变量1没有值;因此错误。

由于您想在调用站点确保您的脚本是通过 bash 执行的,因此使用 -c 的想法无论如何都不好,因为在这种情况下,#!行将确定要使用的 shell。你可以写

bash -l /cygdrive/c/test.sh "my argument"

这会将我的参数作为第一个参数传递给您的脚本。

另一种可能性是使该参数可选,并为其提供默认值。在这种情况下,您可以将作业写为

ARGUMENT=${1:-default value}

使用此构造,bash 也不会抱怨未设置的变量。