Bash:相同的版本,语法适用于Fedora而不是Manjaro.为什么?



source这个小脚本来简化构建一些代码:

function buildprog () {
local builddir="/home/$USER/prog/build"
echo "$builddir"
# max threads - 2
local np=6
local old_wd=$(pwd)
local rel="Release"
local deb="Debug"
case $1 in
"all"); buildprog $rel & buildprog $deb;;
"$rel")
cd "${builddir}/$rel"; make -j $np;;
"$deb")
cd "${builddir}/$rel"; make -j $np;;
*)
echo "Build option '$1' unknown.";;
esac
cd $old_wd
}
complete -W "all Debug Release" buildprog

在我的一台机器Fedora 36 KDE上,这对bashzsh都有效。在我的另一台机器上,使用Manjaro KDE(内核v.5.15.19-1),它报告了一个语法错误:

bash: ./testscript.sh: line 12: syntax error near unexpected token `;'
bash: ./testscript.sh: line 12: `               "all");'

两个系统都将bash --version报告为5.1.16(1)-release,只有一个区别:

Fedora上的(x86_64-redhat-linux-gnu)和Manjaro上的(x86_64-pc-linux-gnu)

是什么原因导致在一台机器上允许单行版本,而在另一台机器上被认为是语法错误?

对于zsh(Fedora上的v.5.8.1, Manjaro上的v.5.9),它可以在两台机器上工作。

我对Linux shell脚本很陌生,所以请温柔;)

修改后的注释:

的来源问题是额外的分号后"all")

case $1 in
# BAD       "all"); buildprog $rel & buildprog $deb;;
"all") buildprog $rel & buildprog $deb;;
"$rel")
...

没有很好的解释为什么有些版本是宽容的。理论上,空语句(例如:';;')会导致语法错误。

相关内容

  • 没有找到相关文章

最新更新