没有所谓的捷径
一切都是时间最平凡的累积

shell脚本中冒号后面跟等号,加号,减号,问号的意义

本文最后更新:2019年7月13日,已超过1921天未更新,如果文章内容失效,请留言反馈本站。

缺省值(:-

 

如果变量后面跟着冒号和减号,则变量后面跟着是这个变量的缺省值。

$ COMPANY=

$ printf “%s/n” “${COMPANY:-Unknown Company}”

Unknown Company

变量的实际值可以保持不变。

冒号也可以省略掉不用:

$ COMPANY=

$ printf “%s/n” “${COMPANY-Nightlight Inc.}”

$

指定缺省值(:=

如果变量后面跟着冒号和等号,则给空变量指定一个缺省值。

$ printf “%s/n” “${COMPANY:=Nightlight Inc.}”

Nightlight Inc.

$ printf “%s/n” “$COMPANY”

Nightlight Inc.

变量的实际值已经改变了。

去除冒号,则不会指定缺省值。

变量是否存在检查(:?

如果变量后面跟着冒号和问号,则根据变量是否存在,显示不同的信息。信息不是必选的。

printf “Company is %s/n” /

“${COMPANY:?Error: Company has notbeen defined—aborting}”

如果没有冒号则不会进行检查。

覆盖缺省值(:+)

 

如果变量后面跟着冒号和加号,则加好后面的字符串替换默认字符串。

$ COMPANY=”Nightlight Inc.”

$ printf “%s/n” “${COMPANY:+Company has been overridden}”

Company has been overridden

如果没有冒号,变量也被字符串所替换,变量本身的值不改变。

替换部分字符串(:n

如果变量后面跟着一个冒号和数字,则返回该数字开始的一个子字符串,如果后面还跟着一个冒号和数字。则第一个数字表示开始的字符,后面数字表示字符的长度。

$ printf “%s/n” “${COMPANY:5}”

light Inc.

$ printf “%s/n” “${COMPANY:5:5}”

light

根据模板删除字串(%,#,%%,##)

如果变量后面跟着井号,则返回匹配模板被删除后的字串。一个井号为最小可能性的匹配,两个井号为自大可能性的匹配。表达式返回模板右边的字符。

$ printf “%s/n” “${COMPANY#Ni*}”

ghtlight Inc.

$ printf “%s/n” “${COMPANY##Ni*}”

$ printf “%s/n” “${COMPANY##*t}”

Inc.

$ printf “%s/n” “${COMPANY#*t}”

light Inc.

使用百分号,表达式返回模板左边的字符

$ printf “%s/n” “${COMPANY%t*}”

Nightligh

$ printf “%s/n” “${COMPANY%%t*}”

Nigh

(在我的Linux系统中上述命令不起取用)

使用模板进行子字符串的替换(//

如果变量后只有一个斜杠,则两个斜杠中间的字符串是要被替换的字符串,而第二个斜杠后面的字符串是要替换的字符串。如果变量后面跟着两个斜杠,则所有出现在两个斜杠中间的字符都要被替换为最后一个斜杠后面的字符。

$ printf “%s/n” “${COMPANY/Inc./Incorporated}”

Nightlight Incorporated

$ printf “You are the I in %s” “${COMPANY//i/I}”

You are the I in NIghtlIght Inc.

如果模板一#号开始,则匹配以模板开始的字符,如果模板以%号结尾,则匹配以模板结尾的字符。

$ COMPANY=”NightLight Night Lighting Inc.”

$ printf “%s/n” “$COMPANY”

NightLight Night Lighting Inc.

$ printf “%s” “${COMPANY//Night/NIGHT}”

NIGHTLight NIGHT Lighting Inc.

$ printf “%s” “${COMPANY//#Night/NIGHT}”

NIGHTLight Night Lighting Inc.

(我的Linux中这个不起作用)

如果没有指定新的值,则匹配的字符会被删除。

$ COMPANY=”Nightlight Inc.”

$ printf “%s/n” “${COMPANY/light}”

Night Inc.

也可以使用范围符号。例如:删除所有字符串中的标点符号,使用范围[:punct:]。

$ printf “%s” “${COMPANY//[[:punct:]]}”

Nightlight Inc

使用星号或@符号替换变量会替换外壳脚本中所有的参数,同样,在数组中使用星号或@符号也会替换数组中的所有元素

» 站长码字辛苦,有用点个赞吧,也可以打个
» 若转载请保留本文转自:豫章小站 » 《shell脚本中冒号后面跟等号,加号,减号,问号的意义》
» 本文链接地址:https://blog.mydns.vip/2081.html
» 如果喜欢可以: 点此订阅本站 有需要帮助,可以联系小站
赞(0) 打赏
声明:本站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,若涉及侵权请及时告知,将会在第一时间删除,联系邮箱:contact@mydns.vip。文章观点不代表本站立场。本站原创内容未经允许不得转载,或转载时需注明出处:豫章小站 » shell脚本中冒号后面跟等号,加号,减号,问号的意义
分享到: 更多 (0)

评论 抢沙发


  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

智慧源于勤奋,伟大出自平凡

没有所谓的捷径,一切都是时间最平凡的累积,今天所做的努力都是在为明天积蓄力量

联系我们赞助我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏