我遇到了一个git commit,它通过这个魔术变量替换来清理一些readlink和dirname命令cd ${0%/*}.
bash如何解释它?
Jim*_*hen 13
在%这里被称为模式匹配操作.
学习Bash Shell书中的一句话:
模式匹配运算符的经典用法是剥离路径名的组件,例如目录前缀和文件名后缀.考虑到这一点,这是一个显示所有运算符如何工作的示例.假设变量path具有值/home/cam/book/long.file.name; 然后:
Expression Result Comments
${path##/*/} long.file.name ## takes out longest matched substring from the front
${path#/*/} cam/book/long.file.name # takes out shortest matched substring from the front
$path /home/cam/book/long.file.name
${path%.*} /home/cam/book/long.file % takes out shortest matched substring from the rear
${path%%.*} /home/cam/book/long %% takes out longest matched substring from the rear
Run Code Online (Sandbox Code Playgroud)
这些可能很难记住,所以这里有一个方便的助记符设备:
在您的具体情况下,#是%我的示例中的对应部分,因此您应该知道它.
如果0是path,$0将扩展为/home/chj/myfile.txt,即剥离"文件"部分.
我理解你提出这个问题的冲动,因为如果没有几个小时深入挖掘一本Bash书,就很难找到答案.