我在剧本中有这一行:
readarray -t vCollection < <(cut -d, -f2 $1)
我的电脑上的一切都运行良好,当我将脚本移动到服务器时,会抛出语法错误:
AddACE_Nexus.sh: line 87: syntax error near unexpected token `<'
AddACE_Nexus.sh: line 87: `readarray -t vCollection < <(cut -d, -f2 $1)'
在服务器上,bash版本是3.2.51(1)-release(x86_64-suse-linux-gnu)
我评论了该部分&lt; &lt;(cut -d,-f2 $ 1)然后没有发现错误
如何更新我的语法以使脚本在服务器上运行,就像在我的PC上一样?
提前致谢!
答案 0 :(得分:2)
您应该使用bash运行脚本,
bash script.sh
或者为脚本使用正确的标题。
#!/bin/bash
...
普通shell不支持进程替换(<()
)。 bash
如果被称为sh
,则将其自身设置为不支持该功能的POSIX兼容模式。
另一个解决方案是在脚本上明确禁用POSIX模式,以防sh
实际上是bash
,但只是指向它的链接。
#!/bin/bash
set +o posix
...
如果使用sh
以某种方式调用脚本,即使标题已经在sh script.sh
已经存在,那将会很有用。