shell 如何判断某个文件名是以某个字符开头的

dingxy 2008-03-31 03:07:26
shell 如何判断某个文件名是以某个字符开头,谢谢
...全文
2124 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dingxy 2008-04-02
  • 打赏
  • 举报
回复
感谢感谢!收藏。
我试过了,basename 也可以的:)
发现shell的内容太多了... 以前只是看,现在到自己写了,才知道
不错,又学了一招,嘿嘿
x86 2008-04-01
  • 打赏
  • 举报
回复
帮楼上补充一下,%和%%也有类似作用,不过是从后面往前匹配。
而${var/pattern/string}则用来替换。

例子:
TEST=/home/cam/book/long.file.name && echo ${TEST##/*/}
TEST=/home/cam/book/long.file.name && echo ${TEST#/*/}
TEST=/home/cam/book/long.file.name && echo ${TEST%.*}
TEST=/home/cam/book/long.file.name && echo ${TEST%%.*}

推荐《学习bash》一书,有电子版《Learning the bash shell》
hzcpig 2008-04-01
  • 打赏
  • 举报
回复
${value#pattern}
${value##pattern}
去掉value中与pattern相匹配的部分,条件是value的开头与pattern相匹配
#与##的区别在于一个是最短匹配模式,一个是最长匹配模式.
x86 2008-04-01
  • 打赏
  • 举报
回复
basename命令可以取得文件名。
dingxy 2008-04-01
  • 打赏
  • 举报
回复
恩,基本解决了,非常感谢楼上两位,不过是否可解释一下
filename=${PATH1##*/} 的语法呢,谢谢!
cceczjxy 2008-04-01
  • 打赏
  • 举报
回复
PATH1=/root/hzc/test.txt
filename=${PATH1##*/}
echo $filename
pos="tesi"
if [ `expr match $filename $pos ` -ne 0 ]
then
echo yes !
else
echo no
fi
cceczjxy 2008-04-01
  • 打赏
  • 举报
回复
借楼上的

PATH1=/root/hzc/test.txt
filename=${PATH1##*/}
pos=t
if [ `expr match $filename $pos ` -eq 1 ]
then
echo yes !
else
echo no
fi
hzcpig 2008-04-01
  • 打赏
  • 举报
回复
[code=BatchFile]$ cat test.sh
PATH=/root/hzc/test.txt
echo ${PATH}
echo ${PATH##*/}
$ ./test.sh
/root/hzc/test.txt
test.txt[/code]
dingxy 2008-04-01
  • 打赏
  • 举报
回复
我的想法的是先取出路径中file的名字,然后在判断,但是不知道怎么取。。。。。
dingxy 2008-04-01
  • 打赏
  • 举报
回复
cym64039 ,是否可以详细讲一下你的意思呢?偶对awk不甚了解呢>:<

新的问题:
在local :在shell script aa.sh 中,用下面的语句找到第一个输入参数的开头两个字符,判断是否为"cn"
注意:这里传入的参数不带路径为:cndxy.txt ,程序没问题
======= aa.sh =========
... ...
INFILE=$1

if [[ ${INFILE:0:2} = "cn" ]]
then
PREFIX="cn"
fi

... ...
=======end of aa.sh=====


但是如果,从另外一架server 调用该shell script,输入的参数有路径:/aa/bb/cc/cndxy.txt

我该怎么判断"/aa/bb/cc/cndxy.txt"是否file name:cndxy.txt含有cn呢?

不知道说清楚了没有,先谢谢各位:)
cym64039 2008-03-31
  • 打赏
  • 举报
回复
awk 'BEGIN {print index(filename,first)}'
dingxy 2008-03-31
  • 打赏
  • 举报
回复
自己回答:),欢迎补充。。

echo ${string:1:2}
或者:echo $string |cut -c 1-2
xxgamexx 2008-03-31
  • 打赏
  • 举报
回复
mark

what about comparing ascii pattern?

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧