我有一个数组已创建,我想查找一个关键字,然后如果找到,显示它后面有n个元素的元素。这可能与bash有关,如果是这样,有人可以提供一个例子吗?操作的实施例 :基于条件的数组中的显示元素
element 1=red
element 2=blue
element 3=green
解析通过阵列,如果你看到的“绿色”,显示为2背后的元件。在这种情况下,它会返回“红色”。
我有一个数组已创建,我想查找一个关键字,然后如果找到,显示它后面有n个元素的元素。这可能与bash有关,如果是这样,有人可以提供一个例子吗?操作的实施例 :基于条件的数组中的显示元素
element 1=red
element 2=blue
element 3=green
解析通过阵列,如果你看到的“绿色”,显示为2背后的元件。在这种情况下,它会返回“红色”。
#!/bin/sh
val="blue"
offset=2 #offset index when echoing
array=("red" "green" "blue" "purple" "blue")
for i in $(seq $offset $[${#array[*]}-1])
do
if [ "${array[$i]}" == "$val" ]
then
echo "${array[$[$i-$offset]]}"
fi
done
所有简单的artihmetics可以在$[...]
;不要忘记变量名称前的$
。在处理bash中的数组时非常有用。请注意for循环开始时的偏移量,避免对负指标进行无用的测试。
#!/usr/bin/env bash
val="blue"
array=("red" "green" "blue")
for ((i = 0; i < ${#array[@]}; i++)); do
if [[ $val == ${array[i]} ]] && ((i - 2 >= 0 )); then
echo "${array[i - 2]}"
fi
done
输出:
red
由于@jordanm在评论中指出的那样,你就不需要担心,如果数组索引还没有确定会发生什么事情。
数组的内部[']'(我不记得适当的词),已经是数字上下文了。 '“$ {array [i + 2]}”'将起作用。我向上投票是因为这是一个足够好的例子来让OP开始,但还有其他一些问题需要考虑,例如数组稀疏,如果'i + 2'或'i-2'扩展为null,该怎么办。 – jordanm 2012-08-03 04:46:59
@jordanm:“下标”?我同意,它应该是基于OP使用“后面”一词的'i - 2'。此外,否定的下标会在4.2之前的Bash版本中导致错误。 – 2012-08-03 07:24:09
@jordanm查看我的编辑。 – 2012-08-03 13:57:13
你能解释偏移量吗?这是否意味着所需价值的+2?你也可以使用负数吗? – user1573041 2012-08-04 09:34:59
偏移量是当前元素和显示元素之间的元素数量(如您的示例中所示)。对于负偏移量,它可以在seq指令中进行修改:'$(seq 0 $ [$ {#array [*]} - 1- $ offset])''。其他地方不需要修改。为了使它与正值和负值一起工作,我建议你在for循环之前计算seq指令的边界,具体取决于偏移量的符号,然后用'for in in $(seq $)开始for循环开始$结束)' – Bentoy13 2012-08-07 14:49:24