我们如何检查用户输入是否等于数组的一个元素?

msndm

想象一下我们有一个这样的数组:

declare -a array=( "one" "two" "three" "four" "five" )

for i in "${all[@]}"; do
        echo "$i"
done

我们可以像这样提供来自用户的输入:

read -p "Enter a number: " number

我需要一些东西来检查用户输入是否与该数组的元素之一匹配。如果没有,这应该运行:

echo "Try again: " 

应重复此过程,直到用户输入与数组元素之一匹配。

pa4080

您不需要遍历数组来检查值是否属于它。此外,在这种情况下,我将使用函数的递归调用而不是另一个循环。正如我正确理解的那样,您正在寻找这样的东西:

#!/bin/bash

array=( "one" "two" "three" "four" "five" )

function get_input() {
    read -p "${1}: " number
    if [[ " ${array[*]} " == *" ${number} "* ]]
    then
        echo 'true';
    else
        get_input 'Try again'   # a recursive call of the function
    fi
}

get_input 'Enter a number'      # the initial call of the function

使用[[ 测试命令,我们==在一个字符串(左侧)和一个正则表达式(右侧)之间进行精确匹配

  • 该表达式" ${array[*]} "将我们的数组扩展为一个字符串,由两个空格包围,因此每个元素(即使是第一个和最后一个)都将被空格包围 - try echo '^'" ${array[*]} "'$'

  • 正则表达式*" ${number} "*将匹配由变量的值组成的任何$number字符串,由空格包围,由任何其他字符包围*

我们可以通过其他一些工具来执行这样的测试grep(使用抑制的 stdout -q,并搜索精确匹配\<...\>)。这是一个有趣的版本:

#!/bin/bash

array=( "one" "two" "three" "four" "five" )

function get_input() {
    read -p "${1}: " nm
    echo "${array[*]}" | grep -q "\<${nm}\>" && echo 'true' || get_input 'Try again'
}

get_input "Enter a number"

如果我们想调用数组中每个元素对应的编号,而不是插入像''one''或''two''这样的词,我们该怎么做?例如:输入数字:2

#!/bin/bash

array=( "one" "two" "three" "four" "five" )

# Get the lenght of the array
array_lenght="${#array[*]}"

function get_input() {
    read -p "${1}: " number

    # Test whether the variable $number has a value &and&
    # test whether as integer this value is less or equal to the $array_lenght
    if [[ ! -z ${number} ]] && (( number <= array_lenght && number > 0 ))
    then
        # Outpit the value of the cerain array element
        # Note the first array element has number 0
        echo "${array[$(( number - 1 ))]}"
    else
        get_input 'Try again'
    fi
}

get_input 'Enter an integer number'

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我们可以使用数组的最后一个元素吗?

来自分类Dev

如何将用户输入与数组进行比较,检查它是否小于最后一个输入

来自分类Dev

我们如何在Cassandra“用户定义函数”中传递一个常量值?

来自分类Dev

是否有一个Jekyll UI,我们无需输入代码即可输入博客帖子?

来自分类Dev

在Swift中,如何检查Array的第一个元素是否等于值列表?

来自分类Dev

如果我们有一个assoc数组,如何打印值

来自分类Dev

当我们只知道一个属性时如何返回一个元素

来自分类Dev

我们如何确保我们只能创建一个类的实例?

来自分类Dev

我们如何确保我们只能创建一个类的实例?

来自分类Dev

我们如何创建一个我们应该实现的对象的“骨架类型”?

来自分类Dev

我们如何从链表中的第n个元素遍历到最后一个元素?

来自分类Dev

我们必须如何声明一个结构?

来自分类Dev

我们如何“凿”一个div?

来自分类Dev

我们如何将两个以上的对象数组合并为一个对象数组

来自分类Dev

我如何检查值属性是否等于对象键,如果它等于键值并为其添加一个类

来自分类Dev

我们如何根据 Angular 6 中的另一个数组从数组中删除对象

来自分类Dev

我们如何在yml中创建一个由2个属性组成的数组?

来自分类Dev

我们如何从所有用户那里获得一个唯一的机器 id 或一些 id 以查看他们是否已更新到部署的最新 angular 版本?

来自分类Dev

如何检查用户是否在java中输入了一个符号?

来自分类Dev

为什么我们可以分配一个1 PB(10 ^ 15)的数组并访问最后一个元素,但不能释放它呢?

来自分类Dev

检查用户输入是否在我的数组中

来自分类Dev

检查一个元素是否等于OCaml列表中的任何元素?

来自分类Dev

检查XML元素是否等于另一个XML元素,忽略空值

来自分类Dev

GMP mpz_array_init是一个过时的函数-我们应该如何初始化mpz数组?

来自分类Dev

当我们释放一个按钮时,如何触发一个事件?

来自分类Dev

我们可以有一个由名称参数函数组成的数组吗?

来自分类Dev

我们可以有一个由名称参数函数组成的数组吗?

来自分类Dev

如何检查数组中的多个值是否等于一个字符串?

来自分类Dev

如何检查一个值是否大于或等于另一个?

Related 相关文章

  1. 1

    我们可以使用数组的最后一个元素吗?

  2. 2

    如何将用户输入与数组进行比较,检查它是否小于最后一个输入

  3. 3

    我们如何在Cassandra“用户定义函数”中传递一个常量值?

  4. 4

    是否有一个Jekyll UI,我们无需输入代码即可输入博客帖子?

  5. 5

    在Swift中,如何检查Array的第一个元素是否等于值列表?

  6. 6

    如果我们有一个assoc数组,如何打印值

  7. 7

    当我们只知道一个属性时如何返回一个元素

  8. 8

    我们如何确保我们只能创建一个类的实例?

  9. 9

    我们如何确保我们只能创建一个类的实例?

  10. 10

    我们如何创建一个我们应该实现的对象的“骨架类型”?

  11. 11

    我们如何从链表中的第n个元素遍历到最后一个元素?

  12. 12

    我们必须如何声明一个结构?

  13. 13

    我们如何“凿”一个div?

  14. 14

    我们如何将两个以上的对象数组合并为一个对象数组

  15. 15

    我如何检查值属性是否等于对象键,如果它等于键值并为其添加一个类

  16. 16

    我们如何根据 Angular 6 中的另一个数组从数组中删除对象

  17. 17

    我们如何在yml中创建一个由2个属性组成的数组?

  18. 18

    我们如何从所有用户那里获得一个唯一的机器 id 或一些 id 以查看他们是否已更新到部署的最新 angular 版本?

  19. 19

    如何检查用户是否在java中输入了一个符号?

  20. 20

    为什么我们可以分配一个1 PB(10 ^ 15)的数组并访问最后一个元素,但不能释放它呢?

  21. 21

    检查用户输入是否在我的数组中

  22. 22

    检查一个元素是否等于OCaml列表中的任何元素?

  23. 23

    检查XML元素是否等于另一个XML元素,忽略空值

  24. 24

    GMP mpz_array_init是一个过时的函数-我们应该如何初始化mpz数组?

  25. 25

    当我们释放一个按钮时,如何触发一个事件?

  26. 26

    我们可以有一个由名称参数函数组成的数组吗?

  27. 27

    我们可以有一个由名称参数函数组成的数组吗?

  28. 28

    如何检查数组中的多个值是否等于一个字符串?

  29. 29

    如何检查一个值是否大于或等于另一个?

热门标签

归档