我有一个这样的数组:
declare -A ignoreList='(
[21]="1"
[22]="1"
[25]="1"
[53]="1"
[80]="1"
[143]="1"
[587]="1"
[990]="1"
[993]="1"
[443]="1"
[2008]="1"
[10011]="1"
[30033]="1"
[41144]="1")'
现在我想检查数组ignoreList中的var $ SSH_PORT。
var $ SSH_PORT是这样的: SSH_PORT =" 443"
如果我试试这个:
if [[ -v ignoreList[$SSH_PORT] ]]; then
echo "$SSH_PORT is known"
exit 1
else
echo "$SSH_PORT is not known"
exit 1
fi
我在终端得到这个:
443 is not known
但是443号港口是众所周知的。
所以我试试 SSH_PORT =" 500" (未知)
并运行脚本:
500 is not known
他没有比较
如果我试试这个:
if [[ ${ignoreList[$SSH_PORT]} == 1 ]] ; then
echo In the list.
网络连接
它也没有用
我的Bash版本是4.3
〜#bash --version GNU bash,版本4.3.42(1)-release(x86_64-unknown-linux-gnu) 版权所有(C)2013 Free Software Foundation,Inc。 许可证GPLv3 +:GNU GPL版本3或更高版本http://gnu.org/licenses/gpl.html
这是免费软件;您可以自由更改并重新分发它。 在法律允许的范围内,不作任何担保。
答案 0 :(得分:0)
对于关联数组。
if [[ ${ignoreList[$SSH_PORT]} == 1 ]] ; then
echo In the list.
fi
对于数组:
found=0
for ignore in "${ignoreList2[@]}" ; do
if [[ $ignore == $SSH_PORT ]] ; then
found=1
break
fi
done
if (( found )) ; then
echo In the list.
fi
测试脚本:
#!/bin/bash
declare -A ignoreList='(
[21]="1"
[22]="1"
[25]="1"
[53]="1"
[80]="1"
[143]="1"
[587]="1"
[990]="1"
[993]="1"
[443]="1"
[2008]="1"
[10011]="1"
[30033]="1"
[41144]="1")'
ignoreList2=(21 22 25 53 80 143 587 990 993 443 2008 10011 30033 41144)
for SSH_PORT in 22 23 ; do
echo $SSH_PORT
if [[ ${ignoreList[$SSH_PORT]} == 1 ]] ; then
echo In the list.
else
echo Not in the list.
fi
found=0
for ignore in "${ignoreList2[@]}" ; do
if [[ $ignore == $SSH_PORT ]] ; then
found=1
break
fi
done
if (( found )) ; then
echo In the list.
else
echo Not in the list.
fi
done
答案 1 :(得分:0)
从bash
4.3开始,您可以使用-v
运算符。
$ [[ -v ignoreList[21] ]] && echo present
present
$ [[ -v ignoreList[23] ]] && echo present
如果值为SSH_PORT
,则可以使用
if [[ -v ignoreList[$SSH_PORT] ]]; then
echo "$SSH_PORT is known"
else
echo "$SSH_PORT is not known"
fi