2011-08-18 72 views
1

这是我的bash文件击不比较字符串正确

#!/bin/sh 
ENV=DEV 
echo "env: $ENV" 
if [[ "$ENV" == DEV* ]]; then 
    RUNTIME_CLASSPATH=$(cat ../build/dev.classpath) 
    echo "cp: $RUNTIME_CLASSPATH" 
fi 
echo "done" 

而这里的终端输出:

~proj/bin$ ./test.sh 
env: DEV 
./test.sh: 7: [[: not found 
done 

我不明白什么是错的。是否有其他方式进行字符串比较?

回答

5

如果你想编写一个bash脚本,然后不写POSIX shell脚本:你的家当行更改为:

#!/bin/bash 

在另一方面,如果你想写一个可移植的shell脚本,使用case声明:

case "$ENV" in 
    DEV*) 
    RUNTIME_CLASSPATH=$(cat ../build/dev.classpath) 
    echo "cp: $RUNTIME_CLASSPATH" 
    ;; 
esac 
-1

变化

if [[ "$ENV" == DEV* ]]; then 

if [ "$ENV" == "DEV" ]; then 

+0

虽然这个代码片断可以解决的问题,包括如何* *和* *为什么这个问题解决了[将真正帮助](// meta.stackexchange.com/的解释q/114762)来提高你的文章的质量。请记住,你正在为将来的读者回答这个问题,而不仅仅是现在问的人!请编辑您的答案以添加解释,并指出适用的限制和假设。 –