检查变量是否以bash

时间:2017-02-06 10:26:39

标签: arrays string bash variables comparison

与此相似>> In bash, how can I check if a string begins with some value?,但不重复。

我有两个数组,对于第一个数组中的每个字符串,我想检查第二个字符串中的字符串是否以第一个字符串开头。

array1=("test1","test2","test3");
array2=("test1 etc","test1 nanana","test2 zzz","test3 abracadabra");

for i in "${!array1[@]}"; do
  for j in "${!array2[@]}"; do 
    if [[ "${array1[i]}" == "${array2[j]}*" ]]; then  
      echo "array1[$i] and arry2[$j] initial matches!";
      fi; 
    done; 
done

我在里面尝试了很多条件,例如:

if [[ "${array1[i]}" == "${array2[j]*}" ]]
if [[ "${array1[i]}" == "${array2[j]}*" ]]
if [[ "${array1[i]}" = "${array2[j]*}" ]]
if [[ "${array1[i]}" = "${array2[j]}*" ]]

也没有引号,大括号等等,都没有成功。

1 个答案:

答案 0 :(得分:3)

您的代码中存在一些错误,首先是bash中的数组声明:如果不放置空格,则只有一个元素。请记住在尝试其他任何变量之前始终打印变量。 来自bash docs:

  

ARRAY =(value1 value2 ... valueN)

     

然后每个值都以[indexnumber =]字符串的形式出现。该指数   号码是可选的。如果提供,则为其分配该索引;   否则分配的元素的索引是最后一个的索引   已分配的索引加一。声明接受此格式   同样。如果未提供索引号,则索引从零开始。

循环数组元素:

UIBarButtonItem

以下是代码段:

for element in "${array[@]}"
do
    echo "$element"
done

在OP的评论之后,我意识到他正在尝试使用索引,要做到这一点,你必须使用“$”也用于索引“i”和“j”。 这是一个有效的解决方案:

array1=(test1 test2 test3);
array2=(test1 etc "test1 nanana" test2zzz test3 abracadabra);
for word1 in "${array1[@]}"; do
    for word2 in "${array2[@]}"; do 
        echo "w1=$word1, w2=$word2"
        if [[ ${word2} == ${word1}* ]]; then   
            echo "$word1 and $word2 initial matches!";
        fi;                   
    done;                         
done