当前位置:  开发笔记 > 编程语言 > 正文

如何比较Bourne Shell中的字符串?

如何解决《如何比较BourneShell中的字符串?》经验,为你挑选了3个好方法。

我需要比较shell中的字符串:

var1="mtu eth0"

if [ "$var1" == "mtu *" ]
then
    # do something
fi

但显然"*"在壳牌中不起作用.有办法吗?



1> mstrobl..:

使用Unix工具.该程序cut将愉快地缩短字符串.

if [ "$(echo $var1 | cut -c 4)" = "mtu " ];

......应该做你想做的事.



2> ephemient..:
bash

最短的修复:

if [[ "$var1" = "mtu "* ]]

Bash [[ ]]不会得到全局扩展,不像[ ](由于历史原因必须).


bash --posix

哦,我发帖太快了.Bourne shell,不是Bash ......

if [ "${var1:0:4}" == "mtu " ]

${var1:0:4}意思是前四个字符$var1.


/bin/sh

啊,对不起 Bash的POSIX仿真还远远不够; 一个真正的原始Bourne shell没有${var1:0:4}.你需要像mstrobl的解决方案.

if [ "$(echo "$var1" | cut -c0-4)" == "mtu " ]



3> hasseg..:

您可以调用expr以匹配Bourne Shell脚本中的正则表达式的字符串.以下似乎有效:

#!/bin/sh

var1="mtu eth0"

if [ "`expr \"$var1\" : \"mtu .*\"`" != "0" ];then
  echo "match"
fi

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有