搜索已經讀入文件的數組(lines_ary [@]),我試圖在文本中查找版本號。在這裏我正在尋找Release,所以我可以找到以下版本號。循環播放一個Bash數組:獲取循環中間的下一個元素
有沒有辦法在執行下面的循環時訪問bash腳本中數組中的下一個元素?
for i in ${lines_ary[@]}; do
if [ $i == "Release:" ] ; then
echo ${i+1}
fi
done
這只是打印出'1',而不是'4.4'。
搜索已經讀入文件的數組(lines_ary [@]),我試圖在文本中查找版本號。在這裏我正在尋找Release,所以我可以找到以下版本號。循環播放一個Bash數組:獲取循環中間的下一個元素
有沒有辦法在執行下面的循環時訪問bash腳本中數組中的下一個元素?
for i in ${lines_ary[@]}; do
if [ $i == "Release:" ] ; then
echo ${i+1}
fi
done
這只是打印出'1',而不是'4.4'。
這個輸出 「4.4」:
array=("line 1" "Release: 4.4" "line 3")
# loop over the array indices
for i in "${!array[@]}"; do
if [[ ${array[i]} =~ Release:\ (.+) ]]; then
echo ${BASH_REMATCH[1]} # the text in the capturing parentheses
break
fi
done
完美!謝謝。 – kjbradley
您需要循環上指數數組,而不是數組本身的元素在:
for ((index=0; index <= ${#lines_ary[@]}; index++)); do
if [ "${lines_ary[index]}" == "Release:" ]; then
echo "${lines_ary[index+1]}"
fi
done
使用for x in ${array[@]}
環比元素,而不是在它的索引。使用變量名稱i
不是一個好主意,因爲i
通常用於索引。
我很感激快速的迴應。該行包含「Release:」+「4.4」,因此它們被認爲是此代碼中的一個元素。有什麼想法嗎? – kjbradley
這應該工作:
for ((index=0; index < ${#lines_ary[@]}; index++)); do
line=${lines_ary[index]}
if [[ ${line} =~ ^.*Release:.*$ ]]; then
release=${line#*Release: *}
fi
done
僅供參考'$ {I + 1}'如果說'我要打印的'$ i'值'未設置(即,打印一個空字符串),但在加號後打印單詞(在本例中爲「1」)。加號是使用替代值運算符。 – chepner