gpt4 book ai didi

string - 如何检查最后一个字符串字符是否等于 Bash 中的 '*'?

转载 作者:行者123 更新时间:2023-11-29 08:51:09 27 4
gpt4 key购买 nike

我需要检查路径的最后一位是否包含“*”字符。

我的方法:

length=${#filename}
((filename--))
#use substring to get the last character
if [ ${img:$length:1} == "*"] ;then
echo "yes"
fi

这会返回 [: too many arguments 错误。

我做错了什么?

最佳答案

[ "${filename:$length:1}" == "*" ] && echo yes

在您的帖子中,"*"] 之间没有空格。这让 bash 感到困惑。如果语句以 [ 开头,bash 坚持其最后一个参数是 ]。如果没有空格,最后一个参数是 "*"],在删除引号后,它变成 *] 而不是 ]

综合起来:

length=${#filename}
((length--))
[ "${filename:$length:1}" == "*" ] && echo yes

更多:根据下面的评论,上面的三行可以简化为:

[ "${filename: -1}" == "*" ] && echo yes

-1 是获取最后一个字符的简写。另一种可能性是:

[[ $filename = *\* ]] && echo yes

这使用了 bash 更强大的条件测试 [[。上面查看 $filename 是否匹配 glob 模式 *\* 其中第一个星表示“零个或多个任意字符”,最后两个字符 \*,表示字面上的星号。因此,上述测试文件名是否以文字 * 结尾。可以在@broslow 的回答中找到使用 [[ 解决此问题的另一种方法。

关于string - 如何检查最后一个字符串字符是否等于 Bash 中的 '*'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21425006/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com