问题,有一个变量path,如果其以"/" 开头,则变量path为绝对路径;否则为相对路径,现在需要对变量进行切分,判断字符串的第一个字符是否是“/”
${path:0:1}
其语法为{varname:start:size}, 其中varname为变量的名字,start指定开始位置的偏移量,size指定长度,该语句的含义为从偏移量(start)开始,按照给定长度(size)截取,如果没有指定的长度,则返回剩下的全部字符串。如下面演示的代码:
$ var="something wicked this way comes..."
$ echo ${var:10}
wicked this way comes...
$ echo ${var:10:6}
wicked
$
上述的${path:0:1}可以换成更加复杂的${path%${path#?}}, 而这种更加复杂的写法就是POSIX变量的切分写法。这种写法嵌套了两个字符串切分。内部的${path#?}会提取变量path中除第一个字符外的其余所有内容,其中#表示删除指定模式的第一处匹配,?是正则表达式,只匹配单个字符。
接下来,${path%pattern}会产生一个子串,其值为将指定模式从变量path中删除后所剩下的部分。在这个例子中,被删除的模式正式内部字符串切分的结果,所以最后剩下的就是整个字符串的第一部分。
使用如下的命令也可以实现同样的效果。
$(echo $path | cut -c1)
参考:wicked cool shell scripts, snd edition.