[英]Set variable from item in array before the array is looped in a bash script
我正在從命令的 output 創建一個數組,然后循環遍歷數組並運行使用數組中每個項目的命令。 在循環遍歷數組之前,我想創建一個使用數組中的值之一的變量。 當數組中的一項包含特定字符串時,我將使用此值。
我不確定如何選擇我需要從數組中設置變量的值,然后再循環遍歷數組。 我目前有這個對我不起作用。 我也嘗試循環獲取我的值,但該值沒有跟隨到下一個循環,我認為它沒有被設置,我無法保持循環打開,因為我在循環中循環。
readarray -t ARRAY < <( command that gets array of 5 hostnames )
if [[ $ARRAY[@] == *"FT-01"* ]]; then
FTP="$ARRAY"
fi
for server in "${ARRAY[@]}"; do
echo "Server: ${srv}"
echo "-------------------"
if [[ $server == *"ER-01"* ]]; then
echo " FTP server is ${FTP} and this is ${server}"
fi
done
我很確定第一個 if 語句永遠不會起作用,但我不知道如何從數組中挑選出我需要的值。
有時難以表達一個想法表明您正在像 C 程序員而不是 shell 腳本員一樣思考。 Arrays 和 for 循環不是 shell 腳本中最自然的習慣用法。 考慮改為流式傳輸和管道。
假設獲取主機名的命令稱為list-of-hostnames
。 如果它每行打印一個主機名,您可以使用 grep 過濾結果。
FTP=$(list-of-hostnames | grep FT-01)
如果你真的想使用一個數組,你可以使用printf '%s\n'
把它變成一個 grep-able stream。
FTP=$(printf '%s\n' "${ARRAY[@]}" | grep FT-01)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.