1 2 3 4 5 6 7 8 9 10
| str="/path/to/foo.cpp" echo "${str%.cpp}" echo "${str%.cpp}.o" echo "${str%/*}"
echo "${str##*.}" echo "${str##*/}"
echo "${str#*/}" echo "${str##*/}"
|
在 Bash 脚本中,# 和 ## 符号用于字符串操作,具体用于删除前缀部分:
${str#pattern}:删除变量 str 中最短匹配 pattern 的前缀。
${str##pattern}:删除变量 str 中最长匹配 pattern 的前缀。
例如:
echo "${str##*.}":这行代码使用 ## 删除了最后一个 . 及其前面的所有内容,从而只保留了文件扩展名 cpp。这是因为 * 匹配所有字符。
echo "${str##*/}":这行代码使用 ## 删除了最后一个 / 及其前面的所有内容,因此只保留了文件名 foo.cpp。
${str#*/} 删除了第一个 / 之前的部分,结果是 path/to/foo.cpp。
${str##*/} 删除了最后一个 / 之前的所有部分,结果是 foo.cpp。
这两个符号用于简化路径处理和提取文件名等。