Shell 掐头去尾法


偶然间看到一个 shell 脚本:

#!/bin/sh
eureka_url_list="http://eureka0.svc.default.local,http://eureka1.svc.default.local,"
eureka_url_list=${eureka_url_list%?}
echo "$eureka_url_list"

运行脚本,输出:

http://eureka0.svc.default.local,http://eureka1.svc.default.local

原始字符串末尾的逗号被删除了。

 


Shell  掐头去尾法

# 表示掐头,% 表示去尾
单个 # 或 % 表示最小匹配,两个 # 或 % 表示最大匹配

 

栗子:

file=/dir1/dir2/dir3/my.file.txt

${file#*/}   删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}  删掉最后一个 /  及其左边的字符串:my.file.txt
${file#*.}   删掉第一个 .  及其左边的字符串:file.txt
${file##*.}  删掉最后一个 .  及其左边的字符串:txt
${file%/*}   删掉最后一个  /  及其右边的字符串:/dir1/dir2/dir3
${file%%/*}  删掉第一个 /  及其右边的字符串:(空值)
${file%.*}   删掉最后一个  .  及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*}  删掉第一个  .   及其右边的字符串:/dir1/dir2/dir3/my

 

${file%?}  表示删掉最后一个字符。

最后

简单回顾下 * ? . 在通配符和正则中各自表达的意义。

 

字符 通配符 正则
   * 任意多个字符(包括0个和1个) 前面的字符出现任意次
  ? 任意一个字符 前面的字符出现0次或1次
   . 就表示一个点,无特殊意义 任意一个字符

 

你可能感兴趣的:(Linux)