在shell脚本中,从while循环中的文件读取后无法访问外部变量

在shell脚本中,从while循环中的文件读取后无法访问外部变量,shell,sh,Shell,Sh,PS:我看到了其他类似的问题,我没有使用这些问题中提到的任何管道。我的代码反映了为这些问题指定的答案,但我仍然面临这个问题。这也是一个shell脚本,而不是bash 最有可能的${JAVA\u APP\u DIR}/lib/classpath不存在 比较在符合POSIX标准的dashshell下测试的以下两个相似的代码位(只有前几行不同): 输入文件dummyfile存在 输入文件dummyfile不存在 =bar= while循环的内容从未运行过 请注意,代码有点奇怪: while循环

PS:我看到了其他类似的问题,我没有使用这些问题中提到的任何管道。我的代码反映了为这些问题指定的答案,但我仍然面临这个问题。这也是一个shell脚本,而不是bash

最有可能的
${JAVA\u APP\u DIR}/lib/classpath
不存在

比较在符合POSIX标准的
dash
shell下测试的以下两个相似的代码位(只有前几行不同):

  • 输入文件dummyfile存在

  • 输入文件dummyfile不存在

    =bar=
    
    while
    循环的内容从未运行过


  • 请注意,代码有点奇怪:

    • while
      循环始终运行一次并退出,因为
      $foo
      unset
      然后被重置的


    • 有一个
      done
      ,但没有
      read
      从中输入任何内容。然而,即使没有
      read
      命令,该文件的存在,再加上
      请说明您是如何测试它的。您是否正在运行
      /yourscript
      ,然后尝试使用
      “$classpath”
      ?如果是这样,那么问题是,即使它正确地设置了类路径,它也会在执行脚本的shell中这样做,而不是在启动执行脚本的shell的shell中这样做……如果您的代码末尾有一个
      echo“$classpath”
      ,并且没有反映更改,这至少可以说明如何测试你的测试结果。BTW,考虑运行<代码> SH-XYORScript < /代码>来运行启用日志记录的脚本,并将这些日志编辑成问题。(除此之外,您不需要<代码> x<代码> s >代码> [ $JavaLCaspStase]=“/>”或<代码> [-n“$JavaaCLASPATH”]。
      也同样有效;对于任何符合POSIX标准的
      测试
      实现,只有在使用标记为过时的
      测试
      操作时才需要
      x
      ,请参见
      OB
      sigils--in)。@africandrogba,JAVA\u APP\u DIR的价值是什么?你能做
      [-r“${JAVA_-APP_-DIR}/lib/classpath”]| | echo“无法读取${JAVA_-APP_-DIR}/lib/classpath”
      echo : classpath is 
      
      echo baz > dummyfile
      unset foo
      if false
      then : 
      else while [ -z "$foo" ] ; do
               foo="bar"
           done < dummyfile
      fi
      echo "=$foo="
      
      =bar=
      
      rm -f dummyfile
      unset foo
      if false
      then : 
      else while [ -z "$foo" ] ; do
               foo="bar"
           done < dummyfile
      fi
      echo "=$foo="
      
      dash: 65: cannot open dummyfile: No such file
      ==
      
      unset foo
      if false
      then : 
      else while [ -z "$foo" ] ; do
               foo="bar"
           done < /dev/null
      fi
      echo "=$foo="