在Unix shell脚本中,令牌$ {0%/ *}是什么意思?

时间:2016-02-10 14:48:55

标签: shell unix scripting

我在文件中有以下代码片段(这是代码中留下评论的第一行):

scriptdir=${0%/*}

我无法弄清楚分配给变量'scriptdir'

的值是多少

任何人都可以解释 $ {0%/ *} 解决的内容吗?

由于

2 个答案:

答案 0 :(得分:3)

%运算符告诉shell删除与$0匹配的/*的最短后缀。换句话说,它通过删除最后一个路径组件扩展到给定路径的基本目录。

一些例子:

$0                 ${0%/*}
/foo/bar           /foo
/foo/bar/          /foo/bar
/foo/bar/test.txt  /foo/bar

几乎等同于dirname命令,它可以将以/结尾的路径识别为目录,而不是“空”最终组件。 / p>

# Not /foo/bar, as with parameter expansion
$ dirname /foo/bar/
/foo

答案 1 :(得分:0)

man bash在这些时候非常有用(不过很好看)。

$0 / ${0},是您正在执行的脚本的名称。

%/%%表示$0(后缀)的结尾,%后面的所有内容代表一种模式,在这种情况下/*是“正斜杠后跟任何字符串“。

man页面的相关摘录:

  

{parameter%word} ${parameter%%word}

     

这个词被扩展为产生一个模式,就像文件名一样   扩张。如果模式匹配展开的尾部   参数的值,那么扩展的结果就是值   具有最短匹配模式的参数('%'大小写)或   最长匹配模式('%%'案例)已删除。如果参数是'@'   或'',模式删除操作应用于每个位置   依次参数,扩展是结果列表。如果   参数是一个用'@'或''下标的数组变量   模式删除操作应用于数组的每个成员   转,并且扩展是结果列表。