分析一个Shell函数

看到一个shell函数,看似简单,其实包含的知识点不少,本文来简单梳理一下。函数作用很明确,是去除字符串左右两边的空格,内容如下:

#!/bin/bash

function trim_string()

{

: "${1#"${1%%[![:space:]]*}"}"

: "${_%"${_##*[![:space:]]}"}"

printf '%s ' "$_"

}

分析一个Shell函数

分析一个Shell函数

知识点

  • ${var#*”${sub}”} ${var##*”${sub}”} ${var%”${sub}”*} ${var%%”${sub}”*}
  • $n
  • :
  • $_
  • “”
  • printf

对字符串变量操作

  • ${var#*”${sub}”} :掐去字符串var中从左到右,第一次出现sub子串的左边部分
  • ${var##*”${sub}”} :掐去字符串var中从左到右,最后一次出现sub子串的左边部分
分析一个Shell函数

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

  • 小贴士:#和%分别位于$的左右两边,这2个操作也可以简述为“掐头去尾”。

$n

  • 不多说,n=1..9,分别表示第1到第9个参数
  • n=0,表示执行的shell文件名

冒号

  • 占位符,不做任何事情,返回真。本文函数中,因为冒号后面的部分("${1#"${1%%[![:space:]]*}"}"),不是一个语句,直接执行时会报错;因此必须加冒号。

$_

  • 上一个命令返回的结果
分析一个Shell函数

双引号

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

printf

  • 格式化字符串或数字,和C语言的printf函数一样。
分析一个Shell函数

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章