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
找到了另一个解决方案:进程替换不是符合 POSIX 标准的功能,并且根据您的系统和 shell,可能需要启用它。
在脚本中循环之前使用以下行:
set +o posix
启用它。可能你的系统根本不支持它,那么这没有帮助。
./phish.sh:第 430 行:意外标记附近出现语法错误
;;' ./phish.sh: line 430:
;;'