关于BASH中变量内容的删除、取代与替换

变量内容的删除:

14:54:27-root-~# path=${PATH}
14:54:38-root-~# echo $path
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
14:54:49-root-~# echo ${path#/*:}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
14:55:55-root-~# echo $path
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
14:56:53-root-~# echo ${path##/*:}
/root/bin

如上所示,#代表从前向后删除,删除的是/到:的最短内容,而若是##则是删除/到:的最长内容,其中*是通配符

而要是从后往前删除,则用%或%%

变量的取代:

15:10:17-root-~# echo $path
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
15:10:25-root-~# echo ${path/bin/BIN}
/usr/lib64/qt-3.3/BIN:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
15:11:04-root-~# echo ${path//bin/BIN}
/usr/lib64/qt-3.3/BIN:/usr/local/sBIN:/usr/local/BIN:/usr/sBIN:/usr/BIN:/root/BIN

如上所示,将path变量中的sbin替换为SBIN,用/是将第一个旧字符串替换为新字符串,而//则是将所有的旧字符串给予替换。
变量的测试和替换:

15:22:02-root-~# echo $myname

15:22:14-root-~# myname=""
16:13:57-root-~# myname=${myname-root}
16:14:20-root-~# echo $myname

16:14:23-root-~# myname=${myname:-root}
16:14:32-root-~# echo $myname
root
16:14:34-root-~#

采用myname=${myname-root}时,若变量已经存在,则不会替换,而myname=${myname:-root}则全然不管的去替换

 

posted @ 2015-12-09 16:19  ITbirds  阅读(475)  评论(0编辑  收藏  举报