【问题标题】:How do I test if a string starts with another in bash?如何在bash中测试一个字符串是否以另一个开头?
【发布时间】:2013-03-03 07:49:28
【问题描述】:

非常相似但不重复:https://stackoverflow.com/a/2172367/57883

我在 Git Bash 3.1 中(至少当我在 git bash 中键入 bash 时,提示中会出现这种情况。

和$ test [["DEV-0" == D*]] || echo 'fail' 打印失败。

if [['DEV-0-1' == DEV* ]]; then echo "yes"; 说[[DEV-0-1: command not found 我正在尝试测试git branch 是否返回以 DEV 开头的内容。但我似乎无法应用答案。是不是因为我所有的尝试都是在左侧使用字符串文字而不是变量值?

我也在ideone上试过http://ideone.com/3IyEND

没有运气。 自从我擅长使用 linux 提示符以来已经有 14 年了。

我在 bash 中以 test 开头的字符串缺少什么?

【问题讨论】:

  • 您有语法错误,您需要在 [[ 和 ]] 的两边都有空格;
  • if [['DEV-0-1' == DEV* ]] ; then echo "yes"; 也说[[DEV-0-1: command not found
  • 啊! if [[ 'DEV-0-1' == DEV* ]] ; then echo "yes"; 似乎有效。
  • test || 语法有什么问题?同样的事情?
  • @Maslow [[ 是 bash 内置的测试语法,test 或 [ 是传统的 UNIX 命令(这很重要——在毕竟命令及其参数)。您使用其中一种;尝试像test [[ ... 那样组合它们是没有意义的。

标签: bash git-bash


【解决方案1】:

我可能更愿意做这样的检查:

s1=DEV-0-1
s2=DEV

if [ "${s1:0:${#s2}}" == "$s2" ]; then
  echo "yes"
fi

【讨论】:

    【解决方案2】:

    你错过了一个空间:

     if [[ 'DEV-0-1' == DEV* ]]; then echo "yes"; fi
          ^^
    

    【讨论】:

    • Speedy Gonzales 是...印度人 =)
    • 呵呵.. 我已经遇到这个错误的次数足够多,可以立即看到它;-)
    • @Maslow 模式匹配仅受 [[ 支持。如果你想要 POSIX,你必须使用 case..esac 或 [ -z "${var##dev*}" ]。
    • @Maslow 当你做D* 时,它会被shell before 比较扩展。 test [[ $a == D* ]] || echo 'test fail' 不行。这就是您收到该错误的原因。
    • @Maslow 你可以在这里举我的例子:ideone.com/sC3bbm。 ${a:0:1} 部分基本上是从长度为1 的索引0 开始获取a 的子字符串并进行比较。同样的方式你可以得到不同长度的不同长度的子串。例如。 ${a:0:2} 将给出a 中的前两个字母。
    猜你喜欢
    • 2012-08-12
    • 2011-05-09
    • 2017-11-27
    • 2011-06-13
    • 2013-09-04
    • 2015-06-18
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多