我在文件中有以下代码片段(这是代码中留下评论的第一行):
scriptdir=${0%/*}
我无法弄清楚分配给变量'scriptdir'
的值是多少任何人都可以解释 $ {0%/ *} 解决的内容吗?
由于
答案 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}
这个词被扩展为产生一个模式,就像文件名一样 扩张。如果模式匹配展开的尾部 参数的值,那么扩展的结果就是值 具有最短匹配模式的参数('%'大小写)或 最长匹配模式('%%'案例)已删除。如果参数是'@' 或'',模式删除操作应用于每个位置 依次参数,扩展是结果列表。如果 参数是一个用'@'或''下标的数组变量 模式删除操作应用于数组的每个成员 转,并且扩展是结果列表。