Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
BASH循环错误_Bash_Ssh_Debian_Gnu Screen - Fatal编程技术网

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

我在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=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
         )