Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash:如果我的变量与其中一个数组匹配_Bash - Fatal编程技术网

Bash:如果我的变量与其中一个数组匹配

Bash:如果我的变量与其中一个数组匹配,bash,Bash,我创建了一个短信自动回复脚本,目前它允许我的机器回复所有电话号码,现在我只想过滤一个特定的电话号码,所以当列表中没有其他电话号码时,我的机器会忽略它 #!/bin/bash PhoneNumberFilter="yes" PhoneNumber[0]="08123" PhoneNumber[1]="08321" PhoneNumber[2]="12345" MyPhoneNumber="08321" echo "My phone number is: $MyPhoneNumber" echo

我创建了一个短信自动回复脚本,目前它允许我的机器回复所有电话号码,现在我只想过滤一个特定的电话号码,所以当列表中没有其他电话号码时,我的机器会忽略它

#!/bin/bash
PhoneNumberFilter="yes"
PhoneNumber[0]="08123"
PhoneNumber[1]="08321"
PhoneNumber[2]="12345"

MyPhoneNumber="08321"
echo "My phone number is: $MyPhoneNumber"
echo "all numbers: ${PhoneNumber[@]}"
if [[ "$PhoneNumberFilter" == "yes" ]] && [[ *"$MyPhoneNumber"* == "${PhoneNumber[*]}" ]]; then
    echo "it works"
    echo "My phone number is in the list of arrays"
    echo "Send SMS to my phone number only"
else
    echo "it doesn't work, my phone number is not in the list"
    echo "ignore it"
fi

如何显示it works部件?当我执行该脚本时,它总是显示“它不工作”部分。

在数组中的键中存储数字,而不是值。如下所示,对于关联数组,这需要bash 4.0或更高版本-尽管对于纯数值,也可以在没有它们的情况下实现,但需要注意的是,即使值以0开头,也需要确保base-10解析

declare -A phoneNumbers=( [08123]=1 [08321]=1 [12345]=1 )
myPhoneNumber=08321

if [[ ${phoneNumbers[$myPhoneNumber]} ]]; then
  echo "Found"
fi

实现这一点的有效方法是将数字存储在键字段中,而不是值字段中;然后是O1查找。我仍然不明白,抱歉,我还在学习,我应该如何实现它?我用命令行修复了它。谢谢:dremove我之前的评论-我搞错了。正确的东西实际上是[[${PhoneNumber[*]}=*$MyPhoneNumber*]]-带有空格。但是,如果数组值可以包含空格,那么仍然容易出现误报,因此关联数组方法可以更好地扩展,并且更可靠。