我遇到了这段神秘的代码,我相信它包含某种形式的变量扩展。
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
。