【发布时间】:2021-01-12 21:08:32
【问题描述】:
我想知道为什么无论我是否将第一个位置参数传递给下面的函数,测试 [[ ! -v 1 ]] 都会失败:
shopt -os nounset
function foo {
echo -n "$FUNCNAME: 1st positional parameter "
[[ ! -v 1 ]] && echo "is missing." || echo is "\"$1\"."
}
我知道还有其他测试方法,但为什么这个特定的测试不起作用?
【问题讨论】:
-
AFAIK,
-v不是[[可用的运算符(至少根据我系统上 bash 4.1 附带的手册页)。也许你想要[[ -z "$1" ]]?或者你真的需要测试零长度位置参数的存在吗? -
试试
[[ -v SHELL ]]; echo $?。-z在这里不起作用,因为shopt -os nounset。 -
可能它不适用于整数,使用像“foo”这样的普通变量名可以。
-
我认为位置参数不符合 shell 变量,这就是为什么 -v 对它们不起作用
-
对我来说,检查参数是否存在应该使用
$#。另见stackoverflow.com/questions/11492338/…
标签: bash shell parameters