在shell脚本中,从while循环中的文件读取后无法访问外部变量
PS:我看到了其他类似的问题,我没有使用这些问题中提到的任何管道。我的代码反映了为这些问题指定的答案,但我仍然面临这个问题。这也是一个shell脚本,而不是bash 最有可能的在shell脚本中,从while循环中的文件读取后无法访问外部变量,shell,sh,Shell,Sh,PS:我看到了其他类似的问题,我没有使用这些问题中提到的任何管道。我的代码反映了为这些问题指定的答案,但我仍然面临这个问题。这也是一个shell脚本,而不是bash 最有可能的${JAVA\u APP\u DIR}/lib/classpath不存在 比较在符合POSIX标准的dashshell下测试的以下两个相似的代码位(只有前几行不同): 输入文件dummyfile存在 输入文件dummyfile不存在 =bar= while循环的内容从未运行过 请注意,代码有点奇怪: while循环
${JAVA\u APP\u DIR}/lib/classpath
不存在
比较在符合POSIX标准的dash
shell下测试的以下两个相似的代码位(只有前几行不同):
=bar=
while
循环的内容从未运行过请注意,代码有点奇怪:
循环始终运行一次并退出,因为while
是$foo
然后被重置的unset
- 有一个
,但没有done
从中输入任何内容。然而,即使没有read
命令,该文件的存在,再加上read
也同样有效;对于任何符合POSIX标准的请说明您是如何测试它的。您是否正在运行
,然后尝试使用/yourscript
?如果是这样,那么问题是,即使它正确地设置了类路径,它也会在执行脚本的shell中这样做,而不是在启动执行脚本的shell的shell中这样做……如果您的代码末尾有一个“$classpath”
,并且没有反映更改,这至少可以说明如何测试你的测试结果。BTW,考虑运行<代码> SH-XYORScript < /代码>来运行启用日志记录的脚本,并将这些日志编辑成问题。(除此之外,您不需要<代码> x<代码> s >代码> [ $JavaLCaspStase]=“/>”或<代码> [-n“$JavaaCLASPATH”]。echo“$classpath”
实现,只有在使用标记为过时的测试
操作时才需要测试
,请参见x
sigils--in)。@africandrogba,JAVA\u APP\u DIR的价值是什么?你能做OB
[-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="