有一个if条件如下
if [ "${1#*-}" = "$1" ]; then
echo "Do something"
fi
Run Code Online (Sandbox Code Playgroud)
但是有人可以解释一下是什么意思${1#*-}吗?
${1#*-}删除变量中*-类似glob的模式的最短匹配$1.
例如abcdef-xyz-foo- >xyz-foo
您的if支票实际上是:
if $1 does not contain '-'
Run Code Online (Sandbox Code Playgroud)
此测试是否"-"在参数 1 中没有
看到这个:
test=jhonatan
if [ "${test#*-}" = "$test" ]; then
echo "yes" ;
else
echo "no" ;
fi
Run Code Online (Sandbox Code Playgroud)
这个打印是因为"-"在字符串测试中没有
有了这个
test=jhonatan-piffer
Run Code Online (Sandbox Code Playgroud)
相同的脚本打印没有。
${variable#pattern} 删除字符串的前缀模式。
在最后一种情况下,开始到之间的所有字符串 "-"
echo ${test#*-}
Run Code Online (Sandbox Code Playgroud)
导致:
"piffer"
Run Code Online (Sandbox Code Playgroud)
并且"piffer"不同于"jhonatan-piffer"
阅读更多信息:https : //www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion
*-是匹配(可能为空)字符串后跟a的模式-.该#运营商下降到最短前缀匹配*-,从扩张$1.一个例子:
$ foo="123-456"
$ echo "${foo#*-}"
456
$ foo="123-456-789"
456-789
Run Code Online (Sandbox Code Playgroud)
我强调最短,因为有一个伴随运算符##丢弃最长的匹配前缀.
$ echo "${foo##*-}"
789
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5107 次 |
| 最近记录: |