$ echo $SHELL
/bin/bash
$ /bin/bash --version | head -1
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
$ set -o nounset
如果希望非交互式脚本在变量为空或未设置变量时打印错误并退出:
$ [[ "${HOME:?}" ]]
$ [[ "${IAMUNBOUND:?}" ]]
bash: IAMUNBOUND: parameter null or not set
$ IAMNULL=""
$ [[ "${IAMNULL:?}" ]]
bash: IAMNULL: parameter null or not set
如果您不希望脚本退出:
$ [[ "${HOME:-}" ]] || echo "Parameter null or not set."
$ [[ "${IAMUNBOUND:-}" ]] || echo "Parameter null or not set."
Parameter null or not set.
$ IAMNULL=""
$ [[ "${IAMUNNULL:-}" ]] || echo "Parameter null or not set."
Parameter null or not set.
6条答案
按热度按时间vzgqcmou1#
在这种情况下,如果没有设置
WHATEVER
,VALUE
最终会成为一个空字符串。我们使用的是{parameter:-word}
扩展,你可以在man bash
的“参数扩展”下找到它。dwbf0jvd2#
如果要获得预期的结果,则需要执行quote the variables:
测试项目:
5jdjgkvh3#
使用一行:
-z
检查是否存在空变量或未设置变量yws3nbqq4#
假设条件:
如果希望非交互式脚本在变量为空或未设置变量时打印错误并退出:
如果您不希望脚本退出:
您甚至可以使用
[
和]
来代替上面的[[
和]]
,但后者在Bash中更可取。请注意上面冒号的作用。
显然不需要
-n
或-z
。**总之,我通常只使用
[[ "${VAR:?}" ]]
。**根据示例,如果变量为空或未设置,则会打印错误并退出。7xllpg7q5#
您可以使用
但是,
可能更容易理解。
nhjlsmyf6#
虽然这并不是所要求的用例,但我发现如果您想使用
nounset
(或-u
),默认行为就是您想要的:表示以非零值结束并显示描述性消息。如果您只想在退出时回显其他内容,或者做一些清理工作,则可以使用陷阱。
:-
运算符可能就是您想要的。