gpt4 book ai didi

bash - 意外标记 `(' 附近的语法错误(可能是 bash 错误)

转载 作者:行者123 更新时间:2023-11-29 09:27:45 24 4
gpt4 key购买 nike

也许我刚刚在 bash 的解析器中触发了一个错误,但在提交错误报告之前我无论如何都不想问,也许我只是瞎了眼,毕竟这不是 bash 错误......

这是脚本(好的,实际脚本的精简版):

$ cat bash-parse-error.1.sh
#! /bin/sh

echo "$(
if false
then
exit 0
fi

# echo "("
case FOO in
FOO)
echo "("
;;
esac
)"
$ ./bash-parse-error.1.sh
./bash-parse-error.1.sh: line 12: syntax error near unexpected token `('
./bash-parse-error.1.sh: line 12: ` echo "("'

现在,如果我取消注释额外的 echo 命令,脚本将按您预期的方式运行,打印两个左括号:

$ cat bash-parse-error.2.sh
#! /bin/sh

echo "$(
if false
then
exit 0
fi

echo "("
case FOO in
FOO)
echo "("
;;
esac
)"
$ ./bash-parse-error.2.sh
(
(

或者,删除 if-false-then-exit block (用注释掉的 echo 命令做任何我想做的事)也会使错误消失:

$ cat bash-parse-error.3.sh
#! /bin/sh

echo "$(
case FOO in
FOO)
echo "("
;;
esac
)"
$ ./bash-parse-error.3.sh
(

所以,是我还是 bash?

/编辑:a) 不需要变通办法,已经有了,无论如何谢谢

b)#!/usr/bash 显然表现出同样的问题,因为

c) 测试版本:4.3.33(1) 和 4.3.39(1)

最佳答案

您看到的是哪个版本的 bash? (我在 3.2.25(1)-release 中看到它,但在 4.1.2(1)-release4.3.42(1)-release 中看不到。)

在 case 语句中使用可选的 ( 也可以解决这个问题。

有关此的问题已提交给 shellcheck 作为 https://github.com/koalaman/shellcheck/issues/482其中引用了 Command Substitution Bash Hackers Wiki 页面也对此进行了讨论(作为“避免构造”)。

尽管从技术上讲,问题在于结束 ) 而不是您在此处找到的开放问题。

bash 4.2.46(1)-CentOS 7 的发行版在 .1.sh 上失败,但在其他两个上运行。并在其中添加 ( 修复 .1.sh

关于bash - 意外标记 `(' 附近的语法错误(可能是 bash 错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33565269/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com