我试图了解以下 bash 脚本是如何运行的
trim_string() {
# Usage: trim_string " example string "
: "${1#"${1%%[![:space:]]*}"}"
: "${_%"${_##*[![:space:]]}"}"
printf '%s\n' "$_"
}
Run Code Online (Sandbox Code Playgroud)
我认为 : 作为无操作运行,但据我所知。
提前致谢
:
确实是一个无操作,因为它不执行任何操作,但它仍然是一个命令(它相当于true
)。因此,它仍然会修改依赖于最后运行命令的 shell 变量,例如众所周知的$?
(最后一个命令的返回状态)或不太为人所知的$_
(最后一个命令的最后一个参数)。
这里用来修改$_
:
${1%%[![:space:]]*}
) 之后的所有字符来获取左侧的所有空格,然后删除变量左侧的这些空格并将结果传递给:
(不执行任何操作,但将with space$_
的内容设置为$1
左侧已移除)最后一行仅打印结果变量,后跟换行符。