为什么我收到错误未绑定变量 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 也不会抱怨未设置的变量。
以下是我的脚本(片段)
#!/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 也不会抱怨未设置的变量。