我编写了一个基本的 bash 函数来测试另一个字符串中是否出现字符串搜索参数。从命令行运行它会产生预期的结果。从 shell 脚本运行相同失败。有人可以告诉我我的方式的错误吗?
me@mylaptop $ line='someidentifier 123 another identifier 789 065 theend'
me@mylaptop $ sarg='+([0-9])+([ ])another identifier'
me@mylaptop $ type strstr
strstr is a function
strstr ()
{
[ "${1#*$2*}" = "$1" ] && return 1;
return 0
}
me@mylaptop $ strstr "$line" "$sarg" ; echo "$?"
0
me@mylaptop $
我的脚本:
me@mylaptop $ cat l.sh
#!/bin/bash
function strstr ()
{
[ "${1#*$2*}" = "$1" ] && return 1;
return 0
}
line='someidentifier 123 another identifier 789 065 theend'
sarg='+([0-9])+([ ])another identifier'
echo '==='"$line"'==='
echo '==='"$sarg"'==='
strstr "$line" "$sarg"
echo "$?"
me@mylaptop $ ./l.sh
===someidentifier 123 another identifier 789 065 theend===
===+([0-9])+([ ])another identifier===
1
me@mylaptop $
您已在交互式 shell 中启用了
extglob
shell 选项,但未在脚本中启用:请注意,您的功能可以简化为