Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用extglob删除参数前缀或后缀时出现问题_Bash_Cygwin - Fatal编程技术网

Bash 使用extglob删除参数前缀或后缀时出现问题

Bash 使用extglob删除参数前缀或后缀时出现问题,bash,cygwin,Bash,Cygwin,我试图在bash脚本中直接从超级字符串的中间拉出一个正则表达式子字符串,而无需对grep执行fork/execing(或其他操作)。要做到这一点,我想使用shell参数扩展来删除不需要的前缀,然后从超弦中删除不需要的后缀。但是前缀和后缀也接近正则表达式,所以我尝试启用extglob并执行类似的操作(在Cygwin下): $echo$BASH\u版本 4.1.10(4)-发布 $shopt-s extglob $foo=foobar $echo$foo 福巴 $echo${foo#fo}#简单的前

我试图在bash脚本中直接从超级字符串的中间拉出一个正则表达式子字符串,而无需对grep执行fork/execing(或其他操作)。要做到这一点,我想使用shell参数扩展来删除不需要的前缀,然后从超弦中删除不需要的后缀。但是前缀和后缀也接近正则表达式,所以我尝试启用extglob并执行类似的操作(在Cygwin下):

$echo$BASH\u版本
4.1.10(4)-发布
$shopt-s extglob
$foo=foobar
$echo$foo
福巴
$echo${foo#fo}#简单的前缀删除工作正常
奥巴尔
$echo${foo/!(FO)/SUB}#使用extglob进行替换
附属的
$echo${foo#!(FO)}
福巴
$echo${foo##!(FO)}
$echo${foo%ar}#简单的后缀删除工作正常
笨蛋
$echo${foo%!(AR)}
福巴
$echo${foo%%!(AR)}

有人能解释一下当extglob启动时前缀和后缀移除的结果吗!是否使用语法?这是bash bug吗?(如果我能弄明白这一点,那么我将尝试比“FO”和“AR”更复杂的模式)

%%
删除最长的匹配后缀。由于
foobar
是匹配“not AR”的最长前缀,因此整个字符串将被删除。

${foo%!(AR)}
表示“删除非AR的最短后缀”。最短的后缀是空字符串

${foo%%!(AR)}
表示“删除非AR的最长后缀”。在“foobar”的情况下,它会删除所有内容。要获得更有趣的结果,请尝试:

$ echo ${foo%%!(foobar)}
f
$ echo ${foo%%!(*bar)}
foob
我现在对自己说:“呸!”
$ echo ${foo%%!(foobar)}
f
$ echo ${foo%%!(*bar)}
foob