神秘的 bash 变量

神秘的 bash 变量

我遇到了这段神秘的代码,我相信它包含某种形式的变量扩展。

echo "Usage: ${0##*/} [-f] [-u user] [--] "

美元符号后跟括号内的字符串是否等同于 bash 变量 $0?如果是,为什么要使用前者而不是后者?感谢您的启发。

答案1

${variable}是常规参数扩展。当在另一个字符串中间扩展时,可以使用括号来分隔变量名。例如,如果您想要扩展$variablefoo,shell 将无法知道变量名的结束位置。通过使用${variable}foo,shell 可以准确知道您的意思。

括号还允许在扩展期间进行各种其他操作。上面的示例从左侧删除表达式匹配的内容。如果给定一个字符串(例如路径)/a/b/c,它将返回c。这实际上相当于basename所做的,但在某些情况下参数扩展可能更方便、更易读。

参数扩展可以执行各种基本字符串操作。作为内置操作,它们在执行简单任务时通常比 sed 或 awk 性能更好。

如果你对 shell 脚本感兴趣,我建议你阅读本指南在 bash 黑客维基上。

答案2

它用参数扩展从 中删除目录$0

相关内容