Shell参数名称后带有井号和百分号的语法
请解释以下语法:
i##*. i%.*
我了解它在做什么,但是我想知道一般模式(为什么/如何做)。
出现的代码:
#!/bin/bashrecursive_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