- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在运行 bash 脚本,该脚本需要为 SunOs 和 Linux 运行不同的代码,并且我从不应该是真的代码部分得到语法错误。我没想到,因为我认为 Bash 是作为解释器工作的。
bash 版本在 SunOS 上是 2.5,在 Linux 上是 4.1。它提示的语法只支持 3.1 版本。
我试图禁用带有“else”子句的较新代码,但它看起来仍处于预解析状态。
我的脚本的第一行也有“:”而不是“#!/bin/sh”。
测试.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”才能在不同的机器上运行这个脚本。
最佳答案
至少从版本 2 开始,bash 就支持数组语法;如果你在那里遇到错误,那是因为你的脚本根本不是在 bash 下运行,而是在其他一些 shell 下运行。这可能与您的脚本以 :
开头而不是 shebang 行有很大关系,这意味着它取决于运行脚本的任何人来确定运行它的内容,结果不一致。我强烈建议使用合适的 shebang 系列。如果 bash 不存在于可预测的位置,您可以使用 #!/usr/bin/env bash
。如果 bash 可能不在 PATH
中,您可以使用类似于脚本序言 here 的东西-- #!/bin/sh
shebang 后跟用于查找和切换到 bash 的命令。
关于预解析的问题:是的,bash 和其他 shell 在执行 if
结构之前会一直解析到 fi
关键字。他们需要找到 then
、else
和 fi
关键字,以便弄清楚他们将要执行什么以及他们要执行什么将跳过,为了找到他们必须解析他们的方式。
关于bash - bash脚本会预先解析语法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48389848/
问了这个问题How to reach CSS zen? ,我现在明白我遇到的问题大多与定位有关。我发现一些文章说 CSS 作为布局系统并不总是足够好。 http://echochamber.me/vi
我是一名优秀的程序员,十分优秀!