Bash 修剪功能

Adz*_*Adz 5 linux bash

我试图了解以下 bash 脚本是如何运行的

trim_string() {
    # Usage: trim_string " example string "
    : "${1#"${1%%[![:space:]]*}"}"
    : "${_%"${_##*[![:space:]]}"}"
    printf '%s\n' "$_"
}
Run Code Online (Sandbox Code Playgroud)

我认为 : 作为无操作运行,但据我所知。

提前致谢

use*_*067 5

:确实是一个无操作,因为它不执行任何操作,但它仍然是一个命令(它相当于true)。因此,它仍然会修改依赖于最后运行命令的 shell 变量,例如众所周知的$?(最后一个命令的返回状态)或不太为人所知的$_(最后一个命令的最后一个参数)。

这里用来修改$_

  • 第一个用途是修剪左侧的空格。它首先通过删除第一个非空格字符 ( ${1%%[![:space:]]*}) 之后的所有字符来获取左侧的所有空格,然后删除变量左侧的这些空格并将结果传递给:(不执行任何操作,但将with space$_的内容设置为$1左侧已移除)
  • 第二个使用类似的技术修剪右侧的空格(找到右侧的所有空格,然后将其删除)

最后一行仅打印结果变量,后跟换行符。