[英]bash / Variable value is empty after the loop
我是bash的新手,嘗試一個簡單的循環,但是變量之后它的值丟失了,我無法理解為什么-我看過幾個類似的問題,但它們都與while循環的子shell執行有關。 我沒有做,但仍然面臨問題-有人可以向我解釋我的錯誤在哪里嗎?
#!/bin/bash
check_ss ()
{
command_list | awk '{print $1 $9}' > ss.out
for i in {1..8}
do grep -Pa "\x3$i" ss.out > ss$i.out
if grep -w "NotStarted" ss$i.out
then
ss$i=0
else
ss$i=1
fi
done
}
check_ss
echo $ss1
echo $ss2
echo $ss3
echo $ss4
我在執行時得到這個:
[root@lubo ~]# ./ss.sh
./ss.sh: line 21: ss1=1: command not found
./ss.sh: line 21: ss2=1: command not found
./ss.sh: line 21: ss3=1: command not found
./ss.sh: line 21: ss4=1: command not found
./ss.sh: line 21: ss5=1: command not found
./ss.sh: line 21: ss6=1: command not found
./ss.sh: line 21: ss7=1: command not found
./ss.sh: line 21: ss8=1: command not found
提前致謝
您需要使用declare
來動態構造變量名。
declare "ss$i=0"
數組將是動態變量名的更好替代方案。
check_ss() {
ss=()
command_list | awk '{print $1 $9}' > ss.out
for i in {1..8}; do
grep -Pa "\x3$i" ss.out > ss$i.out
if grep -w "NotStarted" ss$i.out; then
ss[$i]=0
else
ss[$i]=1
fi
done
}
check_ss
echo ${ss[1]}
echo ${ss[2]}
echo ${ss[3]}
echo ${ss[4]}
您還可以擺脫臨時文件。
check_ss() {
ss=()
command_list | awk '{print $1 $9}' > ss.out
for i in {1..8}; do
if grep -Pa "\x3$i" ss.out | grep -w "NotStarted"; then
ss[$i]=0
else
ss[$i]=1
fi
done
}
我不知道您輸入的內容到底是什么樣子,但您甚至可以進一步簡化為:
check_ss() {
ss=()
while read i; do
ss[$i]=1
done < <(command_list | awk '$9=="NotStarted" {print $1}')
}
或者,如果您只想要未開始編號的列表,
ss=(command_list | awk '$9=="NotStarted" {print $1}')
echo "${ss[@]}"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.