linux - 命令替换:第 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
解决方案
假设这些行中的第一行......
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
推荐阅读
- javascript - 在反应中设置状态后如何等待
- python - Python,从循环中分离结果的方式都是一样的
- javascript - 如何在打字稿中获得“这个”类型
- sql - SQL Server:如何在存储过程中声明变量
- php - 与 php 控制台应用程序远程交互
- python - Django 教程 - 编写你的第一个 Django 应用程序,第 2 部分,我正在尝试迁移,但它显示“没有要应用的迁移”。
- charts - 自定义图表填充/模式
- mysql - 总计4个别名
- javascript - 为什么我的 postgreSQL 查询不在我的终端上时说它是未定义的?
- kubernetes - 为什么无法访问我在 Minikube 中运行的 gRPC REST 服务?