下面有一个if条件
if [ "${1#*-}" = "$1" ]; then
echo "Do something"
fi
但是有人可以解释${1#*-}
的含义是什么吗?
答案 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