Bash技巧:介绍MultipleParameterExpansionExpressionsforHandlingStringVariableswithExamplesnewvalue等。本文总结了与字符串变量值相关的参数扩展表达式。假设在bash中定义了类似filepath=example/subdir/testfile.txt的变量,可以使用以下参数扩展来获取一些值:${filepath}获取filepath变量的值。例如,echo${filepath}命令打印example/subdir/testfile.txt。${#filepath}获取filepath变量值的字符数,即字符串的长度。例如echo${#filepath}命令打印27。${filepath:4:3}从filepath变量值开头的第4个字符开始,往后3个字符得到一个子串。例如,echo${filepath:4:3}命令打印ple。请注意,计数从开头的第0个字符开始。这个表达式的格式是${parameter:offset:length},其中offset指定从哪里开始获取字符,length指定获取多少个字符。${filepath:-3:3}从filepath变量值的倒数第三个字符开始,往后三个字符得到一个子串。例如,echo${filepath:-3:3}命令打印txt。负偏移量表示倒数偏移量。冒号和减号之间应该有一个空格。请注意,它从末尾的第一个字符开始计数。${filepath#*/}在filepath变量值中,从头开始匹配给定的*/模式,删除第一个匹配到的模式,返回剩余内容。这里的*通配符用于匹配开头的任意字符串。例如,echo${filepath#*/}打印subdir/testfile.txt。这个表达式的格式是${parameter#word},从参数变量值中去掉匹配word的最短前缀部分。${filepath##*/}在filepath变量值中,从头开始匹配给定的*/模式,删除最后匹配的模式,并返回剩余内容。这里的*通配符用于匹配开头的任意字符串。例如,echo${filepath##*/}打印testfile.txt。这个表达式的格式是${parameter##word},从参数变量值中去掉最长匹配词的前缀部分。${filepath%/*}在filepath变量值中,从头到尾匹配给定的/*模式,删除第一个匹配到的模式,返回之前剩余的内容。这里的*通配符用于匹配末尾的任何字符串。例如,echo${filepath%/*}打印example/subdir。这个表达式的格式是${parameter%word},从参数变量值中去掉最短匹配词的后缀部分。${filepath%%/*}在filepath变量值中,从头到尾匹配给定的/*模式,删除最后匹配到的模式,返回之前剩余的内容。这里的*通配符用于匹配末尾的任何字符串。例如,echo${filepath%%/*}打印示例。这个表达式的格式是${parameter%%word},从参数变量值中去掉最长的匹配词后缀。${filepath/[et]/M}在filepath变量值中,将第一个匹配的小写字母e或小写字母t替换为大写字母M。这里的[et]路径名扩展用于匹配小写e,或者a小写字母t。这个表达式的格式是${parameter/pattern/string},将匹配模式的字符串替换为string字符串。仅替换第一个匹配的模式字符串。模式字符串可以位于变量值的开头、中间和结尾。例如,echo${filepath/[et]/M}打印Mxample/subdir/testfile.txt。${filepath//[et]/M}在filepath变量值中,将所有匹配的小写字母e,或小写字母t替换为大写字母M。这里的[et]扩展用于匹配一个小写字母e,或一个小写字母吨。让pattern模式字符串以字符'/'开头,表示替换所有匹配的字符串。例如,echo${filepath//[et]/M}打印MxamplM/subdir/MMsMfilM.MxM。${filepath/subdir}在filepath变量值中,删除匹配的subdir字符串。例如,echo${filepath/subdir}打印example//testfile.txt。该表达式不提供替换后的字符串,即删除匹配的字符串。${parameter#word}只能删除匹配的前缀。${parameter%word}只能删除匹配的后缀。而${parameter/pattern}可以删除任意位置的匹配字符串,包括中间位置。${filepath^^}将filepath变量值中的所有字符转换为大写。例如,echo${filepath^^}打印EXAMPLE/SUBDIR/TESTFILE.TXT。这个表达式的格式是${parameter^^pattern},它将参数变量值中匹配模式pattern的每一个小写字母都转换为大写。如果没有提供模式,它匹配任何字符。${filepath,,}将filepath变量值中的所有字符转换为小写。例如,echo${filepath,,}打印example/subdir/testfile.txt。此表达式的格式为${parameter,,pattern},它将参数变量值中与模式pattern匹配的每个大写字母转换为小写。如果没有提供模式,它匹配任何字符。${filepath^}将filepath变量值的第一个字符转换为大写。例如,echo${filepath^}打印Example/subdir/testfile.txt。这个表达式的格式是${parameter^pattern},它将匹配模式pattern的参数变量值的第一个字符转换为大写。如果没有提供模式,它匹配任何单个字符。${filepath,}将filepath变量值的第一个字符转换为小写。例如,echo${filepath,}打印example/subdir/testfile.txt。该表达式的格式为${parameter,pattern},它将匹配模式pattern的参数变量值的第一个字符转换为小写。如果没有提供模式,它匹配任何单个字符。以上内容总结了多个字符串变量值相关的扩展表达式,方便统一收藏和参考。关于这些扩展表达式的详细解释,以及更多的测试例子,可以查看我之前的三篇以《BashTrick:UsingParameterExpansion》开头的文章。
