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
。
这两个符号用于简化路径处理和提取文件名等。