什么是`##`意味着在bash变量替换`$ {}`?

时间:2017-07-21 09:39:07

标签: bash

我正在学习http://www.tldp.org/LDP/abs/html/index.html上的bash脚本资料 并插入例7-7:

http://tldp.org/LDP/abs/html/comparison-ops.html#EX14

${filename##*.} != "gz",这可能意味着 $filename不以.gz结尾,但我不这样做 在这里知道##的含义。有谁可以帮助我?

谢谢!

3 个答案:

答案 0 :(得分:4)

在变量扩展中使用${string##sub}sub中删除最长匹配子字符串string#相反地删除最短匹配子字符串。)

在你的情况下,是的 - 这将在文件名的第一个.之后返回字符串,给出文件扩展名。

如果您在this文档中搜索##,您会找到解释(以及其他类似命令)。

答案 1 :(得分:1)

在文件名的上下文中,试图在变量filename中找到扩展名

filename="*.log"
echo ${filename##*.}
log

我们正在" *。"

之后获得字符串文件名的一部分

答案 2 :(得分:1)

##用于从变量中删除子字符串。有关详情,请查看this页面。

例如。如果filename=/home/user.name/folder.1/test.gz,那么$ {filename ## *。}将为您输出gz