GJ.*_*GJ. 12 bash if-statement unary-operator
在我的bash脚本中,我有一个函数为后面的main函数的条件返回0或1(true或false).
function1 () {
if [[ "${1}" =~ "^ ...some regexp... $" ]] ; then
return 1
else
return 0
fi
}
Run Code Online (Sandbox Code Playgroud)
然后在我的主要功能:
main () {
for arg in ${@} ; do
if [ function1 ${arg} ] ; then
...
elif [ ... ] ; then
...
fi
done
}
Run Code Online (Sandbox Code Playgroud)
然而,当我运行这个脚本时它总是给我一个错误信息"[:function1:一元运算符预期"
有人可以帮我吗?
tri*_*eee 29
您犯了一个常见的错误,即假设它[是if命令语法的一部分.它不是; if简单的语法
if command; then
... things which should happen if command's result code was 0
else
... things which should happen otherwise
fi
Run Code Online (Sandbox Code Playgroud)
command我们使用的常见问题之一是[命令的别名test.这是一个比较字符串,数字和文件的简单命令.它接受一个相当狭窄的参数组合,如果你没有传递预期的参数,往往会产生令人困惑和误导性的错误消息.(或者更确切地说,一旦你习惯了它,错误信息就足够了,但如果不使用它们很容易被误解.)
在您的main函数中,调用[显示放错位置.你可能意味着
if function "$arg"; then
...
elif ... ; then ...
Run Code Online (Sandbox Code Playgroud)
顺便说一下,为了更好的衡量,你也应该总是引用你的字符串."$1"不要使用$1,而"$arg"不是$arg.
test作为一般厨房水槽的历史原因,作者不想成为语法的一部分,if是原始Bourne shell的一个不太吸引人的设计.Bash并zsh提供不那么笨重的替代品(比如[[你在function1定义中使用的bash中的双括号),当然,POSIX test比贝尔实验室的原始创作更加温和.
作为补充说明,您的功能可以简化为
function1 () {
! [[ "$1" =~ "^ ...some regexp... $" ]]
}
Run Code Online (Sandbox Code Playgroud)
也就是说,执行测试[[并反转其结果代码.("正常"情况是返回0表示成功,但是您可能正在尝试验证字符串是否不匹配?)
| 归档时间: |
|
| 查看次数: |
31176 次 |
| 最近记录: |