【发布时间】:2012-05-14 15:18:45
【问题描述】:
在我的 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: 需要一元运算符
我该如何解决这个问题?
【问题讨论】:
-
请注意,至少在 bash 版本 4 中,您不应引用正则表达式:这样做会强制进行简单的字符串匹配 -- documented here。此外,您应该使用带引号的
for arg in "$@",或更简单的for arg; do ... -
你应该把你的正则表达式放在一个变量中。
pattern='^ ...some regexp... $'; if [[ $1 =~ $pattern ]]。请注意,在双方括号内,没有必要引用变量,正如 glenn 所说,永远不应该引用正则表达式(变量)。
标签: bash if-statement unary-operator