我需要检查路径是否包含'*'字符作为最后一位数字.
我的方法:
length=${#filename}
((filename--))
#use substring to get the last character
if [ ${img:$length:1} == "*"] ;then
echo "yes"
fi
Run Code Online (Sandbox Code Playgroud)
这会返回"[:太多参数"错误.
我究竟做错了什么?
Joh*_*024 14
[ "${filename:$length:1}" == "*" ] && echo yes
Run Code Online (Sandbox Code Playgroud)
在你的帖子中,"*"和之间没有空格].这让bash感到困惑.如果一个语句开头[,bash坚持认为它的最后一个参数是].没有空格,最后一个参数是"*"]在引用删除之后变为*]哪个不是].
把它们放在一起:
length=${#filename}
((length--))
[ "${filename:$length:1}" == "*" ] && echo yes
Run Code Online (Sandbox Code Playgroud)
更多: 根据下面的评论,上面的三行可以简化为:
[ "${filename: -1}" == "*" ] && echo yes
Run Code Online (Sandbox Code Playgroud)
这-1是获取最后一个角色的简写.另一种可能性是:
[[ $filename = *\* ]] && echo yes
Run Code Online (Sandbox Code Playgroud)
这使用了bash更强大的条件测试[[.上面看到if $filename匹配的*\*是第一个星形意味着"零个或多个任何字符"和最后两个字符的glob模式\*,表示一个文字星形字符.因此,上面测试文件名是否以文字结尾*.使用此问题的另一种解决方案[[可以在@ broslow的答案中找到.
只需使用正则表达式
if [[ "$filename" =~ '*'$ ]]; then
echo "yes"
fi
Run Code Online (Sandbox Code Playgroud)
您的语法中的几个问题.
] ${variable:${#variable}:1}不会返回任何字符,${variable:$((${#variable}-1))}应该工作(注意尽管最后的1长度是多余的)| 归档时间: |
|
| 查看次数: |
15137 次 |
| 最近记录: |