Shell参数名称后带有井号和百分号的语法

请解释以下语法:

  i##*.

i%.*

我了解它在做什么,但是我想知道一般模式(为什么/如何做)。

出现的代码:

#!/bin/bash

recursive_name_change()

{

cd "$1"

for i in *

do

#echo "${i##*.}"

if [ -d "$i" ]

then

recursive_name_change "$i"

elif [ "${i##*.}" = "cpp" ]

then

new_name=${i%.*}".c"

mv "$i" "$new_name"

fi

done

cd ../

}

recursive_name_change .

也有人建议,我从哪里可以找到这些特殊的语法形式?

回答:

参见 参数扩展man bash

   ${parameter#word}

${parameter##word}

删除匹配的前缀模式。单词被扩展以产生一个模式,就像路径名扩展一样。如果模式与参数值的开头匹配,则扩展的结果是删除了最短匹配模式(#情况)或最长匹配模式(##情况)的参数的扩展值。如果parameter为@或,则将模式去除操作依次应用于每个位置参数,并且扩展为结果列表。如果parameter是用@或下标的数组变量,则将模式删除操作依次应用于数组的每个成员,并且扩展为结果列表。

  ${parameter%word}

${parameter%%word}

删除匹配的后缀模式。单词被扩展以产生一个模式,就像路径名扩展一样。如果模式与参数的扩展值的结尾部分匹配,则扩展的结果是具有最短匹配模式(%情况)或最长匹配模式(%%情况)删除。如果parameter为@或,则将模式去除操作依次应用于每个位置参数,并且扩展为结果列表。如果parameter是用@或下标的数组变量,则将模式删除操作依次应用于数组的每个成员,并且扩展名是结果列表。

简而言之,#从左侧删除图案,%从右侧删除图案,将符号加倍会使匹配的贪婪。(助记符:在大多数键盘上#位于左侧%)。

以上是 Shell参数名称后带有井号和百分号的语法 的全部内容, 来源链接: utcz.com/qa/425108.html

回到顶部