我们如何在 bash 中匹配字符串中的后缀?
我想检查输入参数是否以“.c”结尾?我该如何检查?这是我到目前为止得到的信息(感谢您的帮助):
#!/bin/bash
for i in $@
do
if [$i ends with ".c"]
then
echo "YES"
fi
done
I want to check if an input parameter ends with ".c"? How do I check that? Here is what I got so far (Thanks for your help):
#!/bin/bash
for i in $@
do
if [$i ends with ".c"]
then
echo "YES"
fi
done
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
case
的经典案例!是的,语法很晦涩,但你很快就会习惯它。与各种 Bash 和 POSIX 扩展不同,它可以一直移植到原始的 Bourne shell。
切线而言,您需要在
"$@"
周围加上双引号,以便它正确处理带引号的参数。A classical case for
case
!Yes, the syntax is arcane, but you get used to it quickly. Unlike various Bash and POSIX extensions, this is portable all the way back to the original Bourne shell.
Tangentially, you need double quotes around
"$@"
in order for it to correctly handle quoted arguments.解释(感谢jpaugh):
for i in $@; do
if [ -z ${i##*.c} ];然后。这里我们检查字符串
${i##*.c}
的长度是否为零。${i##*.c}
意思是:取$i值并通过模板“*.c”删除子字符串。如果结果是空字符串,则我们有“.c”后缀。这里是来自 man bash 的一些附加信息,参数扩展部分
Explanation (thanks to jpaugh):
for i in $@; do
if [ -z ${i##*.c} ]; then
. Here we check if length of string${i##*.c}
is zero.${i##*.c}
means: take $i value and remove substring by template "*.c". If result is empty string, then we have ".c" suffix.Here if some additional info from man bash, section Parameter Expasion