PROG=${0##*/}
似乎解析出 shell 脚本名称,但尚不清楚它是如何工作的。 ${0} 我理解是第一个或第 0 个变量。
答案1
正如 tarabyte 所暗示的那样,这必须处理参数扩展。
$0 是执行此脚本所使用的名称和路径。例如,如果调用 /usr/bin/example.sh,则 $0 将是“/usr/bin/example.sh”。如果您当前的工作目录是 /usr,并且您使用 ./bin/example.sh 调用相同的脚本,那么 $0 将是“./bin/example.sh”。
至于“#”,这意味着删除之前指定的前缀后扩展$0。在这种情况下,先前指定的前缀是 */ glob。单个“#”是非贪婪的,因此在匹配第一个 */ glob 后,它将停止。因此它将删除第一个“/”及其之前的所有内容。两个“#”的意思是贪婪地删除所有*/。所以它会发现删除所有“/”以及它们之前的所有内容。
编辑摘要: ${0##*/} 相当于 $(basename $0) 但没有额外的分叉