与此相似>> 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]}*" ]]
也没有引号,大括号等等,都没有成功。
答案 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