有人知道下面代码的含义吗?
#!/bin/sh
files=`find -name *.conifg`
for i in $files
do
name=${i#*/}
dir=${name%/*}
done
我不明白这两行:
name=${i#*/}
dir=${name%/*}
"# /"的含义是什么?和"%/ "?感谢。
答案 0 :(得分:3)
让我们做一个测试,看看它的行为:
$ mypath="this/is/my/path"
$ echo ${mypath#*/}
is/my/path
$ echo ${mypath%/*}
this/is/my
所以
name=${i#*/} -> gets everything from first slash in $i variable.
dir=${name%/*} -> gets everything up to last slash in $name variable.
取自资源:
<强> $ {参数#字} 强>
这个词被扩展为产生一个模式,就像文件名一样 扩展(请参阅文件名扩展)。如果模式匹配 参数的扩展值的开头,然后是结果 扩展是最短的参数的扩展值 匹配模式('#'情况)。如果参数是'@'或'',则 模式删除操作应用于每个位置参数 转,扩展是结果列表。如果参数是 使用'@'或''下标的数组变量,模式删除 操作依次应用于数组的每个成员,并且 扩展是最终的清单。
<强> $ {参数%字} 强>
这个词被扩展为产生一个模式,就像文件名一样 扩张。如果模式匹配展开的尾部 参数的值,那么扩展的结果就是值 删除了最短匹配模式('%'的情况)的参数。 如果参数为“@”或“”,则应用模式删除操作 依次对每个位置参数进行扩展 结果清单。如果参数是一个用'@'下标的数组变量 或'',模式删除操作应用于每个成员 依次是数组,扩展是结果列表。