首页 > 解决方案 > 命令替换:第 72 行:意外标记 `(' 附近的语法错误

问题描述

我仍在使用 bash 脚本找出一些利基,但在我的 bash 脚本中出现以下错误:

updated_names=$(comm -23 <(echo ${current_run_names} | tr " " "\n" | sort) <(echo ${started_run_names} | tr " " "\n" | sort) )
updated_names =$(echo ${updated_names} | cut -d' ' -f1)

不知道我做错了什么,删除了各种令牌,但仍然继续出现同样的错误。

我如何运行它

sh conversion.sh -r directory_location

标签: linuxbashunix

解决方案


假设这些行中的第一行......

updated_run_names=$(comm -23 <(echo ${current_run_names} | tr " " "\n" | sort) <(echo ${started_run_names} | tr " " "\n" | sort) )
update_run_names=$(echo ${new_run_names} | cut -d' ' -f1)

... 是错误消息中引用的第 72 行,问题很可能与您的进程替换有关。这是表格的两个片段<( command )

进程替换是 POSIX shell 语言的 Bash 扩展。大多数其他 shell 无法识别它,并且在 POSIX 模式下运行时 Bash 本身也无法识别它。让 Bash 在 POSIX 模式下运行的方法不止一种,但其中之一是通过 name 调用它sh,这就是您正在做的事情。

请注意,脚本顶部的 shebang 行仅在您直接启动脚本时才具有功能性作用,方法是使其可执行并按名称启动:

./conversion.sh -r directory_location

当您按照问题所示启动它时,通过将其命名为 的参数sh,shebang 行只是一个注释,并且 Bashsh在 POSIX 模式下运行(as )。

另请注意,尽管它对于某些其他语言解释器(尤其是 Python)是常规的,但在 shell 脚本 shebang 行中使用它是常规的。env


推荐阅读