Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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中的模式匹配_Bash_Pattern Matching - Fatal编程技术网

Bash中的模式匹配

Bash中的模式匹配,bash,pattern-matching,Bash,Pattern Matching,下面是一个获取文件名不同部分的示例 bash-3.2$ pathandfile=/tmp/ff.txt bash-3.2$ filename=$(basename $pathandfile) bash-3.2$ echo $filename ff.txt bash-3.2$ echo ${filename##*.} txt bash-3.2$ echo ${filename%.*} ff 我想知道模式中的##和%是什么意思。模式匹配如何

下面是一个获取文件名不同部分的示例

bash-3.2$ pathandfile=/tmp/ff.txt  
bash-3.2$ filename=$(basename $pathandfile)  
bash-3.2$ echo $filename    
ff.txt    
bash-3.2$ echo ${filename##*.}     
txt    
bash-3.2$ echo ${filename%.*}    
ff    
我想知道模式中的##和%是什么意思。模式匹配如何运作

谢谢和问候

  • ${string##substring}
    • 从$string前面删除最长匹配的$substring
  • ${string%substring}
    • 从$string后面删除$substring的最短匹配项
发件人:

${string##substring}

从$string前面删除最长匹配的$substring

${string%子字符串}

从$string后面删除$substring的最短匹配项


bash
的手册页显示:

${parameter#word}
${parameter##word}

删除匹配的前缀模式。该单词被展开以生成一个模式,就像 在路径名扩展中。如果模式与参数值的开头匹配,则展开的结果是参数的展开值,并带有 最短匹配模式(小写)或最长匹配模式(小写)
##
案例)已删除。如果参数为
@
*
,则模式删除操作将被禁用 依次应用于每个位置参数,展开即为结果 列表如果参数是以
@
*
下标的数组变量,则模式 移除操作依次应用于阵列的每个成员,扩展 是结果列表

${参数%word}
${parameter%%word}

删除匹配的后缀模式。该单词被展开以生成一个模式,就像 在路径名扩展中。如果模式与展开的 参数的值,则展开的结果是 删除了具有最短匹配模式(
%%
案例)或最长匹配模式(
%%
案例)的参数。如果参数为
@
*
,则模式删除 操作依次应用于每个位置参数,展开式是 结果列表。如果参数是以
@
*
下标的数组变量,则 阵列移除操作依次应用于阵列的每个成员,并且 展开是结果列表


“#”的助记符(hash)是“head”,而“%”(percenT)的助记符是“tail”。在美国英语qwerty键盘上,“#”在“$”的左边,“%”在“$”的*右边。关于
*
:换句话说,如果上述方法不起作用,记得在前缀或后缀中使用
*
,因为
#
%%
将只查找精确匹配。