随笔-常用记录-SHELL TIPS
SHELL-TIPS
shell pattern(参数展开)
${parameter:-word} |
若 parameter 没有设置或为空,展开结果是 word 的值。若 parameter不为空,则展开结果是 parameter 的值 |
${parameter:=word} |
若 parameter 没有设置或为空,展开结果是 word的值。另外,word的值会赋值给parameter。若parameter不为空,展开结果是 parameter的值。
|
${parameter:?word} |
若 parameter 没有设置或为空,这种展开导致脚本带有错误退出,并且 word 的内容会发送到标准错误。若 parameter 不为空,展开结果是 parameter 的值 |
${parameter:+word} |
若 parameter 没有设置或为空,展开结果为空。若 parameter 不为空,展开结果是 word 的值会替换掉 parameter 的值;然而,parameter 的值不会改变 |
${#parameter} |
展开成由 parameter 所包含的字符串的长度。通常,parameter 是一个字符串;然而,如果parameter 是 @ 或者是 * 的话,则展开结果是位置参数的个数。 |
${parameter:offset} ${parameter:offset:length} |
这些展开用来从 parameter 所包含的字符串中提取一部分字符。提取的字符始于第 offset个字符(从字符串开头算起)直到字符串的末尾,除非指定提取的长度。
若 offset 的值为负数,则认为 offset 值是从字符串的末尾开始算起,而不是从开头。注意负数前面必须有一个空格,为防止与 ${parameter:-word} 展开形式混淆。length,若出现,则必须不能小于零。
|
${parameter#pattern} ${parameter##pattern} |
这些展开会从 paramter 所包含的字符串中清除开头一部分文本,这些字符要匹配定义的patten。pattern 是通配符模式,就如那些用在路径名展开中的模式。这两种形式的差异之处是: 该 # 形式清除最短的匹配结果,而该 ## 模式清除最长的匹配结果。
|
${parameter%pattern} ${parameter%%pattern} |
这些展开和上面的 # 和 ## 展开一样,除了它们清除的文本从 parameter 所包含字符串的末尾开始,而不是开头
|
${parameter/pattern/string} ${parameter//pattern/string} ${parameter/#pattern/string} ${parameter/%pattern/string} |
这种形式的展开对 parameter 的内容执行查找和替换操作。如果找到了匹配通配符 pattern的文本,则用 string 的内容替换它。在正常形式下,只有第一个匹配项会被替换掉。在该// 形式下,所有的匹配项都会被替换掉。该/# 要求匹配项出现在字符串的开头,而/% 要求匹配项出现在字符串的末尾。/string 可能会省略掉,这样会导致删除匹配的文本
|
shell trap err
err_handler() { echo "ERROR: Running ${FUNCNAME[1]} failed!" |
本文来自博客园,作者:LiYanbin,转载请注明原文链接:https://www.cnblogs.com/stellar-liyanbin/p/17490603.html