请解释以下语法:
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 .
还请有人建议,我从哪里可以找到这些奇特的语法形式?
See 参数扩展 in man bash
:
${parameter#word}
${parameter##word}
删除匹配的前缀模式。这个词被扩展以产生一个模式
就像路径名扩展一样。如果模式与值的开头匹配
参数,那么展开的结果就是参数展开后的值
具有最短的匹配模式(#
情况)或最长的匹配模式(##
案)已删除。如果参数为@或*,则模式移除
依次对每个位置参数进行运算,展开式为
结果列表。如果参数是下标为@或*的数组变量,
模式删除操作依次应用于数组的每个成员,
展开就是结果列表。
${parameter%word}
${parameter%%word}
删除匹配的后缀模式。这个词被扩展以产生一个模式
就像路径名扩展一样。如果模式匹配的尾随部分
参数的展开值,那么展开的结果就是展开后的值
具有最短匹配模式的参数值(%
情况)或
最长匹配模式(%%
案)已删除。如果参数为@或*,
模式去除操作依次应用于每个位置参数,
展开就是结果列表。如果参数是数组变量
下标为@或*,模式删除操作应用于每个mem-
依次计算数组的 ber,扩展就是结果列表。
简而言之,#
删除左侧的图案,%
从右边开始,将符号加倍会使匹配变得贪婪。 (助记符:#
是在左边%
在大多数键盘上)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)