BASH中“$ {1#* - }”的含义是什么?

时间:2017-01-23 12:44:45

标签: bash

下面有一个if条件

if [ "${1#*-}" = "$1" ]; then
   echo "Do something"
fi

但是有人可以解释${1#*-}的含义是什么吗?

3 个答案:

答案 0 :(得分:7)

${1#*-}删除*-的最短匹配,这是$1变量中类似水球的模式。

E.g。 abcdef-xyz-foo - > xyz-foo

您的if支票实际上是:

if $1 does not contain '-'

答案 1 :(得分:5)

*-是匹配(可能为空)字符串后跟-的模式。 #运算符会从*-的扩展中删除与$1匹配的最短前缀。一个例子:

$ foo="123-456"
$ echo "${foo#*-}"
456
$ foo="123-456-789"
456-789

我强调最短,因为有一个伴随运算符##会删除最长的匹配前缀。

$ echo "${foo##*-}"
789

答案 2 :(得分:2)

如果参数1

中没有"-",则进行此测试

见:

test=jhonatan
if [ "${test#*-}" = "$test" ]; then 
    echo "yes" ; 
else 
    echo "no" ;
fi

此打印是,因为字符串测试中没有"-"

用这个

test=jhonatan-piffer

相同的脚本打印编号

${variable#pattern}删除字符串的前缀模式。

在最后一种情况下,从"-"

开始之间的所有字符串
echo ${test#*-}

结果:

"piffer"

"piffer""jhonatan-piffer"

不同

阅读本文以获取更多信息: https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion