意外标记 `<'

问题描述 投票:0回答:3
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 )'

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

bash shell do-while
3个回答
27
投票

您会收到错误,因为进程替换

<(some command)
部分)不是
sh
中的标准功能(在POSIX中定义),这意味着它可能在某些操作系统上工作,但可能无法在其他操作系统或同一操作系统中工作具有不同的配置。

您澄清说您的脚本顶部有

#!/bin/bash
,但我猜您仍然通过
sh foo.sh
运行脚本,因此,
#!/bin/bash
将被忽略,并且脚本由
sh
解释。

我假设你的默认 shell 是

bash
(运行
echo $SHELL
),所以如果你将脚本粘贴到终端并执行,所有问题都会消失。

====更新====

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

保持

#!/bin/bash
不变,通过
chmod +x foo.sh
使您的脚本可执行。然后直接运行
./foo.sh


11
投票

找到了另一个解决方案:进程替换不是符合 POSIX 标准的功能,并且根据您的系统和 shell,可能需要启用它。

在脚本中循环之前使用以下行:

set +o posix

启用它。可能你的系统根本不支持它,那么这没有帮助。


0
投票

./phish.sh:第 430 行:意外标记附近出现语法错误

;;'                                         ./phish.sh: line 430: 
;;'

© www.soinside.com 2019 - 2024. All rights reserved.