关于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}则全然不管的去替换