【发布时间】:2019-01-17 16:04:21
【问题描述】:
试图检查一个字符串值是否不是两个不同数组的成员。如果其中任何一个都不存在字符串值,那么我需要执行一个语句。我可以用 if 语句来做到这一点......
if [[ $REQ_FIELDS_LIST != *"$XFR_FIELD"* && $NON_INPUT_FIELDS_LIST != *"$XFR_FIELD"* ]];then
但是星号导致子字符串返回误报。不幸的是,删除“*”和 if 语句根本不起作用。看来,检查这个站点,在 bash 中唯一安全的方法是执行 for 循环。但是对于两个不同的数组,最有效的方法是什么。此外,字符串值是数组本身的成员。所以我们已经在遍历一个数组了。遍历字符串值数组,并为每个字符串值检查该字符串是否不是其他两个数组的成员。如果是,则执行语句。
所以我需要...
for XFR_FIELD in $INPUT_FIELDS_LIST
do
if XFR field is not a member of REQ_FIELDS_LIST AND is not a member of NON_INPUT_FIELDS_LIST then
"return 0"
【问题讨论】:
-
$REQ_FIELDS_LIST && $NON_INPUT_FIELDS_LIST是数组还是变量?它们被写为变量,但您将它们称为数组。另外 -$INPUT_FIELDS_LIST中有多少空格或其他分隔值,这是一个数组吗? -
@BrianGurka 如果
REQ_FIELDS_LIST是一个数组,那么$REQ_FIELDS_LIST只获取它的第一个元素;您需要使用"$REQ_FIELDS_LIST[@]"之类的东西来获取所有元素。但这在测试中也行不通;你真的需要遍历元素。 -
您是否考虑过使用关联数组?这样字符串值就可以成为一个键并且成员资格是一个简单的测试。
-
(检查关联数组键成员资格也是一个摊销常数时间操作,因此它不会随着数组变长而变慢;因此它不仅代码更少,而且速度更快)。
-
与您的问题无关,但通常您应该避免使用大写的变量名。这是因为
bash使用了许多大写名称,您可能会与其中一个发生名称冲突。