我創建了一個腳本,它基本上可以獲取 url 上的狀態代碼。如果它大于 399,我正在嘗試添加狀態碼。
元素在 for 回圈塊之外正確地附加到陣列中,但不在其內部。(這里的陣列是 TP)
ARR=('http://google.com' 'https://example.org/olol' 'https://example.org' 'https://steamcommunity.com')
TP=()
TP =("77")
ERROR=true
#for item in "${ARR[@]}";do curl -I $item | grep HTTP | awk '{print $2}'; sleep 3; echo $item; done;
for item in "${ARR[@]}";
do curl -I $item | grep HTTP | awk '{print $2}'| { read message;
echo "hi $message";
TP =("57")
if [ $message -gt 399 ]; then
#TP =("57");
ERROR=false;
echo "$message is greater";
fi
};
sleep 2;
echo $item;
done;
echo "${TP[@]}"
請幫忙,我是菜鳥。
uj5u.com熱心網友回復:
當您將結果(例如,來自curl呼叫)傳遞到另一個命令(例如,grep/awk/read)時,您正在生成一個子shell;當子shell 存在時,子shell 中設定的任何變數都將“丟失”。
修復當前代碼的一個想法:
for item in "${ARR[@]}";
do
read -r message < <(curl -I "$item" | awk '/HTTP/ {print $2}')
echo "hi $message";
TP =("57")
if [ "$message" -gt 399 ]
then
#TP =("57")
ERROR=false
echo "$message is greater"
fi
sleep 2
echo "$item"
done
在哪里:
- 當
curl|awk作為子shell呼叫時,結果被饋送到read當前/父shell中,因此message變數的內容在當前/父shell的范圍內可用 - 在一些變數參考周圍添加雙引號作為良好做法(例如,如果變數包含空格,如果變數為空)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/523620.html
