我有一个带有单元测试的java项目,我正在Linux系统上开发,所以我制作了一个bash脚本来运行我的所有测试。我不能真正让它工作
#!/bin/bash
JUNITPATH="/usr/share/java/junit4-4.11.jar"
TESTCLASSES=$(find kai/modsogner_och_durin/testing/* | grep .class$)
EXT="class"
CLASSNAMES=${TESTCLASSES%.$EXT}
echo "BEFORE: $CLASSNAMES"
DOTS=$CLASSNAMES | tr '/' '.'
echo AFTER: $DOTS
java -cp .:$JUNITPATH org.junit.runner.JUnitCore $DOTS
echo语句和DOTS变量显然仅用于调试目的。我的问题是,当我尝试分配给DOTS时,当我检查DOTS时它是空的。
echo AFTER: $DOTS
这会打印一个空行,但BEFORE:print会完美打印路径。看起来我对bash并不是很好,我错过了一些非常明显的东西,但我真的无法让它工作。我做了至少确保如果我替换
DOTS=$CLASSNAMES | tr '/' '.'
与
echo $CLASSNAMES | tr '/' '.'
它按照预期用点分隔的包打印类名。所以这似乎是一个语法错误。
答案 0 :(得分:3)
像FOO=bar baz
之类的常规赋值需要一个字符串并将其赋值给变量;它不会运行任何命令。
您想要的是通过$(...)
(或过时的`...`
)命令替换:
DOTS=$(echo $CLASSNAMES | tr '/' '.')
但在这个简单的例子中,您还可以使用${varname//pattern/replacement}
使用bash的参数替换:
DOTS=${CLASSNAMES//\//.}