bash - 意外标记附近出现语法错误 `<'

标签 bash shell do-while

StudentAnwser=()
inputScriptFile=001.sh

while IFS= read -r line;
do
    StudentAnwser+=( "$line" )
done < <( sh $inputScriptFile test.txt )

返回错误

foo.sh: line 22: syntax error near unexpected token `<'
foo.sh: line 22: `  done < <( sh $inputScriptFile test.txt )'

这有什么问题吗?我按照其他问题的解决方案从结果中读取行

最佳答案

您收到错误是因为进程替换(<(some command)部分)不是sh中的标准功能(在POSIX中定义) ,这意味着它可能在某些操作系统上运行,但可能在其他操作系统中或在具有不同配置的同一操作系统中运行。

您澄清说您有 #!/bin/bash在脚本的顶部,但我猜您仍然通过 sh foo.sh 运行脚本,因此,#!/bin/bash将被忽略并且脚本由 sh 解释.

我假设您的默认 shell 是 bash (运行 echo $SHELL ),所以如果您将脚本粘贴到终端并执行,所有问题都会消失。

====更新====

如果我的假设正确,可能的解决方案:

离开#!/bin/bash事实上,通过chmod +x foo.sh使您的脚本成为可执行文件。然后直接通过./foo.sh运行即可

关于bash - 意外标记附近出现语法错误 `<',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36144610/

相关文章:

linux - 条件测试时 Shell 脚本权限被拒绝

java - 用逗号运算符做 {} while ( , ),这甚至可能吗?

javascript 在获取视频播放器当前时间时停止响应

bash - 生成文件 `echo -n' 不工作

linux - Heroku 构建包 : permission denied on npm install in bash script

linux - 如何修复不重新启动计算机的备份脚本

regex - Linux中的SED命令用脚本编辑文件

linux - 使用 sh 的 Shell 脚本。文件,显示子串总数

mysql - 使用存储过程或函数遍历一个表并替换另一个表中的值

bash - 在 bash 中,有没有一种方法可以将多个管道连接到一个进程?