BASH循环错误
我在bash中有一个脚本:现在我有了BASH循环错误,bash,ssh,debian,gnu-screen,Bash,Ssh,Debian,Gnu Screen,我在bash中有一个脚本:现在我有了 ISEXISTS = false screen -ls | grep $'^\t' | while read name _rest ; do if [[ "$name" == *"$SERVER"* ]]; then ISEXISTS=true fi done 当我将ISEXISTS设置为true时,这不起作用:如果我测试它,则在循环内ISEXISTS=true,但在循环外ISEXISTS=false:尝试以下方法: ISEXISTS=fa
ISEXISTS = false
screen -ls | grep $'^\t' | while read name _rest ; do
if [[ "$name" == *"$SERVER"* ]];
then ISEXISTS=true
fi
done
当我将ISEXISTS设置为true时,这不起作用:如果我测试它,则在循环内ISEXISTS=true,但在循环外ISEXISTS=false:尝试以下方法:
ISEXISTS=false
while read name _rest
do
if [[ "$name" == *"$SERVER"* ]];
then ISEXISTS=true
fi
done < <( screen -ls | grep $'^\t' )
比如,谁在乎它是否在子shell中运行,只要我们能够得到我们的变量。在这种情况下,通过使用$()
空字符串的计算结果为
false
,因此在本例中,我们不需要显式指定它 您需要用fi
结束if
语句。我添加了它,但是如果[[“$SERVER”=“$name”],我在这里有错误;然后…在if
和[[
之间应该有一个空格。是的,因为您强制while
在子shell中运行(因此范围有限)。为了将管道传输到while
,bash需要将其包装在子shell中,否则bash将管道传输到self,这是自动完成的,因此令人惊讶:“那个子shell是从哪里来的?”。不用担心,每个人都被它咬了一口。;-)除此之外:ISEXISTS=false
应该是ISEXISTS=false
。作业中不允许有空格
ISEXISTS = false
screen -ls | grep $'^\t' | while read name _rest ; do
if [[ "$name" == *"$SERVER"* ]];
then ISEXISTS=true
fi
done
ISEXISTS=false
while read name _rest
do
if [[ "$name" == *"$SERVER"* ]];
then ISEXISTS=true
fi
done < <( screen -ls | grep $'^\t' )
ISEXIST=$(
screen -ls | grep $'^\t' | while read name _rest
do
if [[ "$name" == *"$SERVER"* ]];
then echo "true"
fi
done
)