在shell中有什么意义?

时间:2014-06-04 09:38:01

标签: shell

有人知道下面代码的含义吗?

#!/bin/sh
files=`find -name *.conifg`
for i in $files
do
  name=${i#*/}
  dir=${name%/*}
done

我不明白这两行:

name=${i#*/}
dir=${name%/*}

"# /"的含义是什么?和"%/ "?感谢。

1 个答案:

答案 0 :(得分:3)

这称为Shell Parameter Expansion

让我们做一个测试,看看它的行为:

$ 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.

取自资源:

  

<强> $ {参数#字}

     

这个词被扩展为产生一个模式,就像文件名一样   扩展(请参阅文件名扩展)。如果模式匹配   参数的扩展值的开头,然后是结果   扩展是最短的参数的扩展值   匹配模式('#'情况)。如果参数是'@'或'',则   模式删除操作应用于每个位置参数   转,扩展是结果列表。如果参数是   使用'@'或''下标的数组变量,模式删除   操作依次应用于数组的每个成员,并且   扩展是最终的清单。

     

<强> $ {参数%字}

     

这个词被扩展为产生一个模式,就像文件名一样   扩张。如果模式匹配展开的尾部   参数的值,那么扩展的结果就是值   删除了最短匹配模式('%'的情况)的参数。   如果参数为“@”或“”,则应用模式删除操作   依次对每个位置参数进行扩展   结果清单。如果参数是一个用'@'下标的数组变量   或'',模式删除操作应用于每个成员   依次是数组,扩展是结果列表。