#!/bin/sh
# Read in classpath
if [ x"${JAVA_CLASSPATH}" != x ]; then
classpath="${JAVA_CLASSPATH}"
else
classpath=""
while read file; do
classpath="${classpath}:${JAVA_APP_DIR}/lib/$file"
done < ${JAVA_APP_DIR}/lib/classpath
fi
echo classpath is ${classpath}
我试图通过读取文件来构建类路径,但是在while循环之外无法访问类路径变量。请指定一种在while循环外访问classpath变量的方法.echo语句的结果。
echo : classpath is
PS:我看到了与此类似的其他问题,我没有使用这些问题中提到的任何管道。我的代码反映了为这些问题指定的答案,但我仍然面临着这个问题。这也是一个shell脚本而不是bash。
答案 0 :(得分:0)
很可能${JAVA_APP_DIR}/lib/classpath
不存在。
比较以下两个相似的代码位(仅第一行不同),在符合 POSIX 的dash
shell下进行测试:
输入文件 dummyfile 存在。
echo baz > dummyfile
unset foo
if false
then :
else while [ -z "$foo" ] ; do
foo="bar"
done < dummyfile
fi
echo "=$foo="
输出:
=bar=
输入文件 dummyfile 不存在。
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
==
while
循环的内容从未运行过。
请注意,代码有点奇怪:
while
循环始终运行并退出,因为$foo
为unset
然后重置。
有done < dummyfile
,但没有read
从中输入任何内容。然而,即使没有read
命令,该文件的存在与<
重定向相结合,也决定了$foo
是否已设置。
即使是空文件也可以:
unset foo
if false
then :
else while [ -z "$foo" ] ; do
foo="bar"
done < /dev/null
fi
echo "=$foo="