Java 奇怪的行为:导出类路径=$(JARS=(./lib/*.jar);IFS=:;echo";${JARS[*]}";) export CLASSPATH=$(JARS=(./lib/*.jar);IFS=:;echo“${JARS[*]}”)
如果我把这一行放在一个Java 奇怪的行为:导出类路径=$(JARS=(./lib/*.jar);IFS=:;echo";${JARS[*]}";) export CLASSPATH=$(JARS=(./lib/*.jar);IFS=:;echo“${JARS[*]}”),java,bash,Java,Bash,如果我把这一行放在一个bash_script.sh中 chmod +x bash_script.sh 然后跑 ./bash_script.sh 它给出了错误 Syntax error: "(" unexpected (expecting ")") 我如何能够直接从提示符运行这个东西并获得预期的结果。 作为 $export CLASSPATH=$(JARS=(./lib/*.jar);IFS=:;echo“${JARS[*]}”) 我想知道这种奇怪行为的原因是什么。添加#/bin/bash
bash_script.sh
中
chmod +x bash_script.sh
然后跑
./bash_script.sh
它给出了错误
Syntax error: "(" unexpected (expecting ")")
我如何能够直接从提示符运行这个东西并获得预期的结果。
作为
$export CLASSPATH=$(JARS=(./lib/*.jar);IFS=:;echo“${JARS[*]}”)
我想知道这种奇怪行为的原因是什么。添加#/bin/bash
作为强制在bash shell中运行它的第一行。确保您有#/bin/bash
位于shell脚本的顶部。数组语法VAR=(…)
是一种bash语法。它在纯sh(#!/bin/sh
)中不起作用
顺便说一下,这看起来像是一条来自。如果是这样,我建议您使用我更新的解决方案,而不是此解决方案
不需要手动构建类路径列表。Java支持对包含jar文件的目录使用方便的通配符语法
java -cp "$LIB/*"
您的脚本是否显式具有
#/bin/bash
在顶部?您的交互式命令shell是什么?它在命令提示符下或作为脚本执行时(尽管没有结果)不出现错误的情况下对我有效。添加#/顶部的bin/bash确实让它对我有用,因为它帮助了你,我添加了它作为一个答案。即使你在shebang行中加了一行,有些人仍然会尝试用sh bash_script.sh
来调用你的脚本,所以我建议也加一个set+o posix
,以明确地禁用posix兼容性。不过,最好的方法是避免bash主义,并结合使用find
和paste
来构建类路径。