看到一个shell函数,看似简单,其实包含的知识点不少,本文来简单梳理一下。函数作用很明确,是去除字符串左右两边的空格,内容如下:
#!/bin/bash
function trim_string()
{
: "${1#"${1%%[![:space:]]*}"}"
: "${_%"${_##*[![:space:]]}"}"
printf '%s
' "$_"
}


知识点:
- ${var#*”${sub}”} 和${var##*”${sub}”} 和${var%”${sub}”*} 和${var%%”${sub}”*}
- $n
- :
- $_
- “”
- printf
对字符串变量操作
- ${var#*”${sub}”} :掐去字符串var中从左到右,第一次出现sub子串的左边部分
- ${var##*”${sub}”} :掐去字符串var中从左到右,最后一次出现sub子串的左边部分

- ${var%”${sub}”*} :掐去字符串var中从右到左,第一次出现sub子串的右边部分
- ${var%%”${sub}”*} :掐去字符串var中从右到左,最后一次出现sub子串的左边部分

- 小贴士:#和%分别位于$的左右两边,这2个操作也可以简述为“掐头去尾”。
$n
- 不多说,n=1..9,分别表示第1到第9个参数
- n=0,表示执行的shell文件名
冒号
- 占位符,不做任何事情,返回真。本文函数中,因为冒号后面的部分("${1#"${1%%[![:space:]]*}"}"),不是一个语句,直接执行时会报错;因此必须加冒号。
$_

双引号
- 在一个变量外加双引号,不会导致变量因为含有空格而出错。
- 测试了一下,用双中括号,不加双引号也可以。

printf
- 格式化字符串或数字,和C语言的printf函数一样。