gpt4 book ai didi

bash - 我在 Bash 脚本中遇到 "unary operator expected"

转载 作者:行者123 更新时间:2023-11-29 08:48:52 25 4
gpt4 key购买 nike

在我的 Bash 脚本中,我有一个函数可以为后面的 main 函数的条件返回 0 或 1(真或假)。

function1 () {
if [[ "${1}" =~ "^ ...some regexp... $" ]] ; then
return 1
else
return 0
fi
}

然后在我的 main 函数中:

main () {
for arg in ${@} ; do
if [ function1 ${arg} ] ; then
...
elif [ ... ] ; then
...
fi
done
}

但是,当我运行这个脚本时,它总是给我一条错误信息:

[: function1: unary operator expected

我该如何解决这个问题?

最佳答案

您犯了一个常见的错误,即假设 [if 命令语法的一部分。它不是; if 的语法很简单

if command; then
... things which should happen if command's result code was 0
else
... things which should happen otherwise
fi

我们使用的常见命令之一是[,它是命令test 的别名。这是一个用于比较字符串、数字和文件的简单命令。它接受相当狭窄的参数组合,如果您没有将预期的参数传递给它,它往往会生成令人困惑和误导的错误消息。 (或者更确切地说,一旦您习惯了错误消息就足够了并且很有帮助,但如果您不习惯它们,它们很容易被误解。)

在您的 main 函数中,对 [ 的调用似乎错位了。你可能是说

if function "$arg"; then
...
elif ... ; then ...

顺便说一句,为了更好的衡量,您还应该始终引用您的字符串。使用 "$1" 而不是 $1,使用 "$arg" 而不是 $arg

test 作为一般厨房水槽的历史原因,作者不想成为 if 语法的一部分,是一种不太吸引人的设计原始的 Bourne shell。 Bash 和 zsh 提供了不那么笨拙的替代方案(例如 bash 中的 [[ 双括号,您在 function1 定义中使用),以及当然,POSIX test 比贝尔实验室的原创作品好得多。

作为额外的说明,您的功能可以简化为

function1 () {
! [[ "$1" =~ "^ ...some regexp... $" ]]
}

即用[[进行测试,并将其结果码取反。 (“正常”情况是成功返回 0,但也许您正试图验证字符串是否匹配?)

关于bash - 我在 Bash 脚本中遇到 "unary operator expected",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10586213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com