【发布时间】:2018-01-22 20:36:37
【问题描述】:
我正在运行 bash 脚本,该脚本需要为 SunOs 和 Linux 运行不同的代码,并且我从不应该为真的部分代码中得到语法错误。我没想到会这样,因为我认为 Bash 是作为解释器工作的。
SunOS 上的 bash 版本是 2.5,Linux 上是 4.1。它抱怨的语法仅支持 3.1 版本。
我尝试使用“else”子句禁用较新的代码,但它看起来仍然是预解析的。
我的脚本还有“:”而不是“#!/bin/sh”作为第一行。
test.sh:
:
echo "`uname`"
if [ `uname` = "SunOS" ]
then
echo "do old stuff"
else
echo "new stuff"
arr=($(grep "^X1" ../foo.txt | sed 's/.*=//'))
fi
错误是
> ./test.sh
SunOS
./test.sh: syntax error at line 8: `arr=' unexpected
如果我注释错误行,那么它会正常工作:
:
echo "`uname`"
if [ `uname` = "SunOS" ]
then
echo "do old stuff"
else
echo "new stuff"
#arr=($(grep "^X1" ../foo.txt | sed 's/.*=//'))
fi
结果是
> ./test.sh
SunOS
do old stuff
我的问题是如何在不发表评论的情况下修复此语法错误?我必须有“if/else”才能在不同的机器上运行这个脚本。
【问题讨论】:
-
从 3.1 开始只支持什么?您在此处使用的数组语法至少在 2.05 中很好。您确定您使用的是
bash而不是sh? -
如果将
:替换为正确的主题标签会发生什么?祝你好运。 -
我如何知道具体使用了什么(bash 或 sh)?这是作为构建过程的一部分执行的。
-
@shelter 我将其替换为 "#! /bin/sh 并发生同样的错误
-
@angie 使用
#!/bin/bash.