如何在 bash 中取消设置数组?

发布于 2025-01-11 13:14:42 字数 413 浏览 0 评论 0原文

在变量的 bash shell 中:

#!/bin/bash
set -o nounset

my_var=aaa
unset var
echo "$var"

因为 set 命令被定义为如果未设置变量则返回错误,所以最后一行返回错误:

第 6 行:var:未绑定变量

好的,这就是我想要的。

现在数组也是如此:

#!/bin/bash
set -o nounset

my_array=(aaa bbb)
unset my_array
echo "${my_array[@]}"

但令我惊讶的是最后一行没有返回错误。我希望 bash 脚本在未定义数组时返回错误。

In bash shell for variables:

#!/bin/bash
set -o nounset

my_var=aaa
unset var
echo "$var"

Because set command is defined to return error if variable is not set, last line returns error:

line 6: var: unbound variable

OK, that is what I want.

Now the same thing with arrays:

#!/bin/bash
set -o nounset

my_array=(aaa bbb)
unset my_array
echo "${my_array[@]}"

But to my surprise last line does not return error. I would like bash script to return error when array is not defined.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蝶…霜飞 2025-01-18 13:14:42

${my_array[@]}$@ 类似,被记录为被 nounset 忽略:

-u 在执行参数扩展时,将除特殊参数“@”和“*”之外的未设置变量和参数视为错误。如果尝试对未设置的变量或参数进行扩展,shell 会打印一条错误消息,并且如果不是交互式的,则会以非零状态退出。

不过,返回数组大小不会被忽略。添加以下行以确保数组未取消设置:

: ${#my_array[@]}

${my_array[@]} is similar to $@ which is documented to be ignored by nounset:

-u Treat unset variables and parameters other than the special parameters "@" and "*" as an error when performing parameter expansion. If expansion is attempted on an unset variable or parameter, the shell prints an error message, and, if not interactive, exits with a non-zero status.

Returning the array size is not ignored, though. Prepend the following line to make sure the array is not unset:

: ${#my_array[@]}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文