Shell脚本字符串的处理问题!

findfriend 2010-05-14 01:40:54
在一个shell里,有一个字符串变量 VAR = “ABCE123?AE"

怎么在shell里判断该变量里有?字符?


请高手指点!
...全文
382 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lbiori241 2010-05-18
  • 打赏
  • 举报
回复
既然是入参,你就应该保证在接口处传入的参数正确,也就是说,你传入的stringZ应该是‘abc\-*’而不是abc\-*
Adebayor 2010-05-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 steptodream 的回复:]

刚才不是回复了吗 你不就是想看一个字符串里是否有问号么?
echo $VAR | grep "\?"
如果有? 上面一句会输出该字符串 echo #?返回0 否则没有输出 echo $?返回1
[/Quote]
正解
steptodream 2010-05-16
  • 打赏
  • 举报
回复
正如你所说呀
findfriend 2010-05-16
  • 打赏
  • 举报
回复
to steptodream:
谢谢!

哈哈,试验了好多次,发现如下规律:
stringZ="abc\-*"
stringX=abc\-*
通过expr lengh $xxx的方式来求字符串长度,前者的长度比后者大1。
所以,感觉“”会把\当作一个字符而非转移字符来看待的。

看来,通过这个方法好像不太行阿,那能不能通过其他方法求出来stringX里字符的个数(\要当作一个字符计算而非转移字符)!

steptodream 2010-05-16
  • 打赏
  • 举报
回复
难倒我了 shell里\就是转义字符
findfriend 2010-05-16
  • 打赏
  • 举报
回复
ps:stringZ这里我写的是一个临时变量,但是,实际运用中是一个入参。谢谢!
findfriend 2010-05-16
  • 打赏
  • 举报
回复
首先谢谢steptodream.

但是,我的工程里stringZ是一个入参,我的目的就是为了判断这个入参里的字符是否合法(当入参里包含\、/、?、*的时候为非合法),其中一个就是当里面包含字符 \ 的时候,该入参为非合法,有什么办法呢?

再谢谢!
steptodream 2010-05-16
  • 打赏
  • 举报
回复
现在我需要把\当作一个字符而不是一个转义字符,该怎么办呢?
----------------
再加一个\
stringZ=abc123*?^\\-_.
findfriend 2010-05-16
  • 打赏
  • 举报
回复
#!/bin/sh
stringZ=abc123*?^\-_.
let n=0
strval=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUWXYZ012345679-_.
leng=$(expr length "$stringZ")
echo $leng
while [ $n -le $leng ]; do
tmp=${stringZ:n:1}
pos=$(expr index "$strval" "$tmp")
echo $pos
let n++
done

这个是我写的一个脚本,循环判断字符串stringZ里的字符是否存在strval里面,但是,运行的时候发现,字符\被认为一个转义字符,所以,求出来的字符串长度不是13而是12(因为把\-当作了一个字符)。现在我需要把\当作一个字符而不是一个转义字符,该怎么办呢?

多谢!
geniusqiao 2010-05-14
  • 打赏
  • 举报
回复
VAR = “ABCE123?AE"
if echo #{VAR} | grep "?" > /dev/null 2>&1
then
echo "该字符里面有问号"
else
echo "没有"
fi
steptodream 2010-05-14
  • 打赏
  • 举报
回复
刚才不是回复了吗 你不就是想看一个字符串里是否有问号么?
echo $VAR | grep "\?"
如果有? 上面一句会输出该字符串 echo #?返回0 否则没有输出 echo $?返回1

23,120

社区成员

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

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