Bash “是什么意思?”${1#*-}”;在狂欢节上

Bash “是什么意思?”${1#*-}”;在狂欢节上,bash,Bash,存在如下的if条件 if [ "${1#*-}" = "$1" ]; then echo "Do something" fi 但是有人能解释一下${1}*-}的含义吗?${1}*-}删除*-中最短的匹配项,这是$1变量中的一个球状模式 例如,abcdef xyz foo->xyz foo 如果您的检查确实: if $1 does not contain '-' *-是与后跟-的字符串(可能为空)匹配的模式。#操作符从扩展的$1中删除匹配*-的最短前缀。例如: $ foo="123-45

存在如下的if条件

if [ "${1#*-}" = "$1" ]; then
   echo "Do something"
fi
但是有人能解释一下
${1}*-}
的含义吗?

${1}*-}
删除
*-
中最短的匹配项,这是
$1
变量中的一个球状模式

例如,
abcdef xyz foo
->
xyz foo

如果您的
检查确实:

if $1 does not contain '-'

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

$ foo="123-456"
$ echo "${foo#*-}"
456
$ foo="123-456-789"
456-789
我之所以强调shortest,是因为有一个伴随操作符
##
,它会删除最长的匹配前缀

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

如果参数1中没有
“-”
,则进行此测试

见此:

test=jhonatan
if [ "${test#*-}" = "$test" ]; then 
    echo "yes" ; 
else 
    echo "no" ;
fi
此打印为是,因为在字符串测试中没有
“-”

用这个

test=jhonatan-piffer
相同的脚本打印号

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

在最后一种情况下,从开始到
“-”

结果:

"piffer"
“皮弗”
不同于
“乔纳坦皮弗”

有关更多信息,请阅读以下内容:

我在下面的答案中遗漏了这个关键词,这就是你在
bash中所说的
感谢大家参与这个问题。
"piffer"