【问题标题】:Finding a string in a varaible with if statement [duplicate]使用 if 语句在变量中查找字符串 [重复]
【发布时间】:2018-11-10 20:40:11
【问题描述】:

我目前正在尝试在一个输出如下内容的变量中找到一个字符串:

一二三

我的代码:

echo "please enter one,two or three)
read var

var1=one,two,threee

if [[ "$var" == $var1 ]]; then
    echo "$var is in the list"
else
    echo "$var is not in the list"
fi

编辑2:

我试过了,但还是不匹配。您认为它与先前答案中的确切字符串不匹配是正确的,因为它与部分匹配。

 groups="$(aws iam list-groups --output text | awk '{print tolower($5)}' | sed '$!s/$/,/' | tr -d '\n')"
echo "please enter data"
read "var"

if [ ",${var}," = *",${groups},"* ]; then
    echo "$var is in the list"
else
    echo "$var is not in the list"
fi

尝试它仍然无法匹配我需要的确切字符串。

【问题讨论】:

  • 这是什么语言?
  • bash 脚本 ...
  • 你能添加一个标签'bash'吗?
  • my var1 是一个像我上面提到的那样运行和输出数据的命令。所以我将 $var 与 $var1 进行比较,但它从未成功找到我从 $var 中输入的任何字符串

标签: string bash variables


【解决方案1】:

可能还有其他问题(例如匹配部分单词),但如果您使用=~(匹配)而不是==,它适用于简单的情况

if [[ "$var1" =~ "$var" ]]; then
   ...

【讨论】:

  • 试过了,同样的事情。使用 aws API 提供更多上下文以列出 IAM 组。 var1=aws iam 列表组 --输出文本 | awk '{打印 $5}' | sed '$!s/$/,/ 当我从脚本中回显它时,它会显示如下:admin、dev、stage
  • 这有效,我的错字错了。
【解决方案2】:

其他答案有一个问题,他们会将列表中项目的 part 匹配视为匹配,例如如果var1=admin,\ndev,\nstage(which I think is what you actually have), then it'll match ifvaris "e" or "min", or a bunch of other things. I'd recommend either removing the newlines from the variable (maybe by adding| tr -d '\n'` 到创建它的管道的末尾),并使用:

if [[ ",${var}," = *",${var1},"* ]]; then

$var 周围的逗号将其锚定到项目的开头和结尾,$var1 周围的逗号允许它表示第一个和最后一个项目。)你也可以让它与左边的换行符一起工作在$var1,但这种事情迟早会搞砸你。

【讨论】:

  • 检查我的编辑,我仍然无法匹配列表中的字符串。但是你关于其他人将匹配不同场景的解释是正确的,因为它就是这样做的。
【解决方案3】:

这样的?

#!/bin/bash
echo "please enter one,two or three"
read var

var1=["one","two","three"]


if [[ ${var} = *${var1}* ]]; then
    echo "${var} is in the list"
else
    echo "${var} is not in the list"
fi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 2021-03-23
    • 2014-06-18
    相关资源
    最近更新 更多