【问题标题】:Linux /bin/sh check if string contains XLinux /bin/sh 检查字符串是否包含 X
【发布时间】:2014-09-05 09:21:50
【问题描述】:

在 shell 脚本中,我如何确定一个字符串是否包含在另一个字符串中。 在 bash 中,我只会使用 =~,但我不确定如何在 /bin/sh 中做同样的事情。有可能吗?

【问题讨论】:

标签: linux shell


【解决方案1】:

你可以使用case语句:

case "$myvar" in
*string*) echo yes ;;
*       ) echo no ;;
esac

您所要做的就是用string 替换您需要的任何东西。

例如:

case "HELLOHELLOHELLO" in
*HELLO* ) echo "Greetings!" ;;
esac

或者,换一种说法:

string="HELLOHELLOHELLO"
word="HELLO"
case "$string" in
*$word*) echo "Match!" ;;
*      ) echo "No match" ;;
esac

当然,您必须注意 $word 不应包含魔法 glob 字符,除非您打算进行 glob 匹配。

【讨论】:

  • 我试过了,但没用 #!/bin/sh myvar="HELLO" myothervar="HELLOHELLOHELLO" case "$myvar" in $myothervar) echo是的 ;; * ) 回声不;; esac
  • 星星,*,两边都很重要,必须在那里。
  • 与我之前的评论(现已删除)相反,它确实进行了变量扩展。问题在于缺少的星星。
  • 另外,你有 myvarmyothervar 倒退。
【解决方案2】:

你可以定义一个函数

matches() {
    input="$1"
    pattern="$2"
    echo "$input" | grep -q "$pattern"
}

获取正则表达式匹配。注意:用法是

if matches input pattern; then

(没有[ ])。

【讨论】:

  • 或者你可以写if echo "$input" | grep -q "$pattern"; then,但这并不是真正的shell解决方案。
  • @ams 命名很重要 :)
【解决方案3】:

你可以试试 在“这是一个测试”中查找“他的”

TEST="This is a test"
if [ "$TEST" != "${TEST/his/}" ]
then
echo "$TEST"
fi

【讨论】:

  • TEST="这是一个测试";如果 [ "$TEST" != ${TEST/his/} ];然后;回声$测试;菲
  • 我得到 [:is: 意外的运算符/操作数
  • @user3840020 TEST="这是一个测试";如果 [ "$TEST" != ${TEST/his/} ];然后回显$TEST; f
猜你喜欢
  • 1970-01-01
  • 2011-11-09
  • 2013-05-18
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 1970-01-01
  • 2013-11-20
相关资源
最近更新 更多